Powershell
如何在基於 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”。
禁用您的 nsclient.ini 編碼 utf8
[/settings/NRPE/server] ;encoding = utf8
在您的腳本中使用
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
使用 : (而不是 write-output 或 write-host) 輸出結果
[Console]::WriteLine("ééé")
為我工作 ,從這裡拿起
更好的解決方案如上所述在 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 -