Ad Widget

Collapse

Есть ли ограничения для скриптов powershell.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Yacudzer
    Junior Member
    • Apr 2019
    • 24

    #1

    Есть ли ограничения для скриптов powershell.

    Всем привет.
    Сегодня я заморочился LLD с помощью powershell.
    Благополучно был написан скрипт, который отлично работает из командной строки... Задача скрипта - с помощь Invoke-SQLCMD сделать некую выборку из базы и выдать ее в виде JSON для заббикса.
    Стартует скрипт следующим образом:
    UserParameter=askue.uspd.discovery[*],powershell -Noprofile -ExecutionPolicy Bypass -File C:\zabbix\scripts\counterlist.ps1 $1
    Как уже было сказано, изначально из командной строки скрипт работает нормально:
    C:\zabbix\scripts>powershell -ExecutionPolicy Bypass -Noprofile -File counterlist.ps1 4492:1;
    {
    "data":[
    {"{#DEVNAME}":"???????????? C70 35???? ??1", "{#USPDCODE}":"4492", "{#DEVCODE}":"1"}
    ]
    }

    На кодировку не стоит пока обращать внимание, там должны быть русские буквы.
    Так вот, а из заббикса есть проблемы. Вот что выдает в ошибке правила discovery:

    Invalid discovery rule value: cannot parse as a valid JSON object: invalid object format, expected opening character '{' or '[' at: 'Invoke-SQLCMD : Could not load file or assembly 'Microsoft.SqlServer.BatchParse
    r, Version=15.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc9

    Ну и логи агента:
    5004:20190422:195629.118 Sending back [Invoke-SQLCMD : Could not load file or assembly 'Microsoft.SqlServer.BatchParse

    r, Version=15.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one

    of its dependencies. ͥ 㤠Ƣ⯠͠ʢȠ㪠Ǡͭ멠䠩ˮ

    At C:\zabbix\scripts\counterlist.ps1:54 char:17

    + ... untertable = Invoke-SQLCMD -Username sa -Password pswd -Query $query;

    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~

    + CategoryInfo : NotSpecified: ( [Invoke-Sqlcmd], FileNotFoundE

    xception

    + FullyQualifiedErrorId : System.IO.FileNotFoundException,Microsoft.SqlSer

    ver.Management.PowerShell.GetScriptCommand



    {
    "data":[

    ]
    }]

    Оговорюсь, что изначально была попытка запустить это хозяйство на PowerShell 2.0, ввиду сложных мытарств с оснастками (так же не удавалось выполнить из-под заббикса) было выполнено обновление до 5.1 и установлен модуль с помощью
    find-module sqlserver | Install-Module -AllowClobber -Force
    Агент-служба запускается из-под LocalSystem
    Так же была выполнена попытка выполнения скрипта из-под LocalSystem с помощью следующей команды (используя утилиту psexec.exe):

    C:\zabbix\scripts>d:\PsExec.exe -s -i cmd.exe /k powershell.exe -ExecutionPolicy Bypass -Noprofile -File c:\zabbix\scripts\counterlist.ps1 4492:1;

    Результаты вот:
    {
    "data":[
    {"{#DEVNAME}":"???????????? C70 35???? ??1", "{#USPDCODE}":"4492",
    "{#DEVCODE}":"1"}
    ]
    }

    C:\Windows\system32>whoami
    nt authority\система

    C:\Windows\system32>

    как видно, скрипт успешно выполняется и из-под LocalSystem. Остается грешить только на какие-то ограничения в выполнении скриптов в самом zabbix. Прошу помочь разобраться с ситуацией.
Working...