Powershell

如何在基於 Powershell 腳本的 check_nrpe 結果中正確顯示重音字元?

  • April 16, 2022

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

引用自:https://serverfault.com/questions/1081408