如何根据 Powershell 脚本正确显示 check_nrpe 结果中的重音字符?

如何根据 Powershell 脚本正确显示 check_nrpe 结果中的重音字符?

我有一个由 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 -

相关内容