Windows-Server-2008

Powershell 預設控制台大小

  • August 16, 2011

我正在使用 NSCLient 在 Windows Server 機器上執行一些 NRPE 檢查。檢查執行 Powershell 腳本,但我遇到的問題是 NSClient 在 79 個字元後添加隨機換行符。我猜這是因為預設的 Powershell/CMD 控制台寬度是 80 個字元(對嗎?),但我需要檢查添加這些新行(它們搞砸了性能數據,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,這樣我可以看到清晰的換行。

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