Всем привет.
Сегодня я заморочился 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. Прошу помочь разобраться с ситуацией.
Сегодня я заморочился 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], FileNotFoundException
+ 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. Прошу помочь разобраться с ситуацией.