![如何根据 Powershell 脚本正确显示 check_nrpe 结果中的重音字符?](https://linux22.com/image/771718/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%20Powershell%20%E8%84%9A%E6%9C%AC%E6%AD%A3%E7%A1%AE%E6%98%BE%E7%A4%BA%20check_nrpe%20%E7%BB%93%E6%9E%9C%E4%B8%AD%E7%9A%84%E9%87%8D%E9%9F%B3%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
我有一个由 Nagios 使用“check_nrpe”调用的自定义 Powershell 脚本。目前,当检查结果显示在 Nagios 上时,所有带有特殊字符(如“è”、“é”或“à”)的检查结果输出消息都无法正确显示。
如何让它们正确显示?
检查命令
$USER1$/check_nrpe -H server.tld -c check_foo -a 7 7 7
nsclient.ini 上的脚本调用
[/settings/external scripts/scripts]
check_foo = cmd /c echo X:\scripts_\check-foo.ps1 -arg1 "$ARG1$" -arg2 "$ARG2$" -arg3 "$ARG3$"; exit($lastexitcode) | powershell.exe -command -
预期结果
CRITICAL - Vérification échouée
实际结果
# UTF-8 BOM (GUI)
CRITICAL - Vrification choue
# UTF-8 BOM (CLI)
CRITICAL - V,rification ,choue,
# UTF-8 (GUI)
CRITICAL - VǸrification ǸchoueǸ
目前我的Powershell脚本是通过Linux CentOS 7监控机和目标服务器(Windows 2016 Server)上的NSClient++用“check_nrpe”远程调用的,脚本itelf的编码为“UTF-8 BOM”。
答案1
禁用你的 nsclient.ini 编码 utf8
[/settings/NRPE/server]
;encoding = utf8
在您的脚本中使用
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
使用 : 输出结果(而不是 write-output 或 write-host)
[Console]::WriteLine("ééé")
对我有用 从这里接
答案2
更好的解决方案是禁用 nsclient.ini 中的 utf8 编码,如上所述
并在 nsclient.ini 中修改包装 ps1 脚本
ps1=cmd /c echo Try {$OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8;scripts\\%SCRIPT% -- %ARGS%; exit($lastexitcode)} Catch {echo $_.Exception.Message; exit 3} | powershell.exe -command -