NSCLientを使用して、WindowsServerボックスでいくつかのNRPEチェックを実行しています。チェックはPowershellスクリプトを実行しますが、私が抱えている問題は、NSClientが79文字の後にランダムな改行を追加することです。これは、デフォルトのPowershell/CMDコンソールの幅が80文字であるためだと思います(これは正しいですか?)が、チェックが必要ですnotこれらの新しい行を追加します(パフォーマンスデータとNagiosを台無しにします)怒ります)。
標準のPowershellインスタンスからコンソールサイズを変更しようとしましたが、機能しませんでした。コマンドラインフラグを使用してコンソールサイズを指定する方法はありますか?ヘルプファイルはあまり使用されませんでした。
Nagiosのcheck_nrpeから取得した出力の例
vmxnet3 ethernet adapter _2:728.370961294234isatap.{1c6435bc-27c9-452b-a6fe-668^M
dced31461}:0| 'Network Usage (Bytes/sec) (vmxnet3 ethernet adapter _2)'=728.370^M
961294234 'Network Usage (Bytes/sec) (isatap.{1c6435bc-27c9-452b-a6fe-668dced31^M
461})'=0
(問題は制御文字にあるのではなく、Nagiosはそれらに気付いていないようですが、新しい行自体にあります)
Powershellスクリプト;
#
# Check Network Usage
#
#Check for argument variables
if ( $($args.count) -lt 2 ) {
"Usage: ./check_network.ps1 [warn level] [crit level]"
exit 3
}
$warn = [int]$args[0]
$crit = [int]$args[1]
#Create buffers for the Nagios output
$ExitStatus = 0
$TextOP = ""
$PerfDataOP = ""
#Get the average network usage for the last 5 seconds
$PerfData = Get-Counter -Counter "\network interface(*)\bytes total/sec" -SampleInterval 5 -MaxSamples 1
foreach($InterfacePerf in $PerfData.CounterSamples) {
#Write the outputs
$TextOP = %{"{0}" -f $TextOP,$InterfacePerf.InstanceName,$InterfacePerf.CookedValue}
$PerfDataOP = %{"{0} 'Network Usage (Bytes/sec) ({1})'={2}" -f $PerfDataOP,$InterfacePerf.InstanceName,$InterfacePerf.CookedValue}
#Trigger alerts
#If level is higher than crit, and the status is 'OK' or 'Warn'
if ( $InterfacePerf.CookedValue -gt $crit -and $ExitStatus -lt 2 ) {
$ExitStatus = 2
} elseif ( $InterfacePerf.CookedValue -gt $warn -and $ExitStatus -eq 0 ) {#warning
$ExitStatus = 1
}
}
#Exit and return status
"$TextOP|$PerfDataOP"
exit $ExitStatus
長い文字列を生成するためのテストサンプルを使用して、次のコードで成功しました...
if( $Host -and $Host.UI -and $Host.UI.RawUI ) {
$rawUI = $Host.UI.RawUI
$oldSize = $rawUI.BufferSize
$typeName = $oldSize.GetType( ).FullName
$newSize = New-Object $typeName (101, $oldSize.Height)
$rawUI.BufferSize = $newSize
}
$longstring = ""
1..200 | %{$longstring += "a"}
$longstring
明らかに、最も重要なビットはトップセクションです。 $longstring
は私が長い弦を作っているだけです。これを次のように短縮することもできます。
$Host.UI.RawUI.BufferSize = New-Object Management.Automation.Host.Size (101, 25)
これにより、値を設定する前のあらゆる種類のテストが削除されます。
幅を101に設定して、明確な行の折り返しが見えるようにしました。
私にはあなたの状況をテストする方法がありませんが、これはうまくいけばそれに対処するでしょう:
"$TextOP|$PerfDataOP" | Out-String -Width 1024