Пользовательские параметры Zabbix Agent в Windows и кодировка

Предположим, на каком-то сервере с Windows у нас установлен Zabbix Agent, при этом настроен такой пользовательский параметр:

1
UserParameter=UserParameter,C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -NonInteractive -File "C:\Scripts\script.ps1"

Скрипт script.ps1 отдаёт строковое значение, да ещё и на русском:

script.ps1
1
Write-Host "Значение пользовательского параметра"

Если попробовать получить значение параметра с сервера, возникает проблема:

1
2
$ zabbix_get -s example.com -k UserParameter
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

Причина в том, что наш скрипт на PowerShell выдаёт значение в кодировке консоли – CP866, а нужно – в UTF8. Меняем скрипт:

script.ps1
1
2
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::WriteLine("Значение пользовательского параметра")

Проверяем:

1
2
$ zabbix_get -s example.com -k UserParameter
Значение пользовательского параметра

Комментарии