Tamanho do console padrão do Powershell

2

Estou usando o NSCLient para executar algumas verificações de NRPE nas caixas do Windows Server. As verificações executam scripts do Powershell, mas o problema que estou tendo é NSClient está adicionando quebras de linha aleatórias após 79 caracteres. Eu estou supondo que isso é porque a largura do console Powershell / CMD padrão é de 80 caracteres (isto é certo?), Mas eu preciso marcar para não adicionar essas novas linhas (eles estragam os dados de desempenho e Nagios ficar chateado).

Eu tentei alterar o tamanho do console de uma instância padrão do Powershell, mas isso não funcionou. Existe alguma maneira de especificar o tamanho do console com um sinalizador de linha de comando? Os arquivos de ajuda não foram muito úteis.

Um exemplo da saída que recebo do check_nrpe do Nagios

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

(O problema não está nos caracteres de controle, o Nagios parece não notar, mas as novas linhas em si)

Roteiro 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
    
por Smudge 08.08.2011 / 10:45

2 respostas

1

Eu tive sucesso com o código a seguir, com um exemplo de teste para gerar uma string longa ...

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

Obviamente, o bit mais importante é a seção superior. $longstring é só eu fazendo uma longa string. Você também pode encurtar isso para:

$Host.UI.RawUI.BufferSize = New-Object Management.Automation.Host.Size (101, 25)

Isso remove qualquer tipo de teste antes de definir valores.

Eu configurei a largura para 101, para que eu pudesse ver uma quebra de linha clara.

    
por 16.08.2011 / 02:05
0

Eu não tenho como testar sua situação, mas esperamos que isso seja resolvido:

"$TextOP|$PerfDataOP" | Out-String -Width 1024
    
por 08.08.2011 / 16:41