Usando o Powershell para obter um grupo de contadores de perfmon específicos

1

Estou tentando configurar um script que gere arquivos blg a cada período de tempo definido, usando o powershell. Eu sei que isso pode ser feito usando modelos XML perfmon, mas para este projeto específico eu tenho que fazê-lo com powershell, se possível.

Meu principal problema é que não consigo armazenar a lista de contadores de desempenho que desejo usar em uma variável e reutilizá-los.

Eu tentei usar o seguinte script para criar uma lista de contadores de desempenho a serem usados:

$Counters = @()
$Counters += '\Memory\Available Bytes' 
$counters += '\Paging File(*)\% Usage'
$Counters += '\PhysicalDisk(*)\Disk Reads/sec'
$Counters += '\PhysicalDisk(*)\Disk Writes/sec'
$Counters += '\PhysicalDisk(*)\Avg. Disk sec/Read'
$Counters += '\PhysicalDisk(*)\Avg. Disk sec/Write'
$Counters += '\Processor(*)\% Processor Time'
$Counters += '\System\Processor Queue Length'
foreach($counter in $Counters)
{
$string = $string + ", '" + $counter + "'" 
$string = $string.TrimStart(",")
}

se eu continuar a usar $ string get-counter, recebo o seguinte erro:

Get-Counter : The specified counter path could not be interpreted.

Ainda quando eu copio o valor exato da string, e uso get-counter -counter Valores de $ string funciona bem ...

Alguém poderia me aconselhar sobre como conseguir que o get-counter funcione com uma matriz ou uma string com uma lista de contadores?

    
por Reaces 03.09.2014 / 15:33

1 resposta

2

Quando uso seu bloco += , recebo de volta um $counters que é uma string concatenada longa.

$counters += '\Memory\Available Bytes'
$counters += '\Paging File(*)\% Usage'
$counters += '\PhysicalDisk(*)\Disk Reads/sec'
$counters += '\PhysicalDisk(*)\Disk Writes/sec'
$counters += '\PhysicalDisk(*)\Avg. Disk sec/Read'
$counters += '\PhysicalDisk(*)\Avg. Disk sec/Write'
$counters += '\Processor(*)\% Processor Time'
$counters += '\System\Processor Queue Length'
$counters

\Memory\Available Bytes\Paging File(*)\% Usage\PhysicalDisk(*)\Disk Reads/sec\PhysicalDisk(*)\Disk Writes/sec\PhysicalDisk(*)\Avg. Disk sec/Read\PhysicalDisk(*)\Avg. Disk sec/Write\Processor(*)\% Processor Time\System\Processor Queue Length

$counters.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

Isso provavelmente não é o que você quer. Se você tornar $counters uma matriz explicitamente, as coisas funcionam um pouco melhor.

$counters = @()
$counters += '\Memory\Available Bytes' 
$counters += '\Paging File(*)\% Usage'
$counters += '\PhysicalDisk(*)\Disk Reads/sec'
$counters += '\PhysicalDisk(*)\Disk Writes/sec'
$counters += '\PhysicalDisk(*)\Avg. Disk sec/Read'
$counters += '\PhysicalDisk(*)\Avg. Disk sec/Write'
$counters += '\Processor(*)\% Processor Time'
$counters += '\System\Processor Queue Length'
$counters.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

$counters | Get-Counter
    
por 03.09.2014 / 17:41