Powershell - Obter contador de desempenho do disco IO

2

Sou muito novo no Powershell. Eu preciso obter falhas de página e disco IO do sistema enquanto um processo específico está sendo executado. Eu sou capaz de obter falhas de página, mas não é possível obter o disco IO. Vocês podem me ajudar por favor. Abaixo está o meu código:

 $arrayDIO = @()
 $arrayPf = @()
 $cmdProcess = start-process cmd -passthru
   while (-not $cmdProcess.HasExited) {
        $arrayDIO += %{ (Get-WmiObject Win32_PerfFormattedData_PerfProc_Process).IOWriteOperationsPerSec }
        $arrayPf += %{ (Get-WmiObject Win32_PerfFormattedData_PerfOS_memory).PageFaultsPerSec }
    sleep 2
  }
 $arrayPf | Measure-Object -Average -Maximum -Minimum | Out-File  -Filepath C:\Details.txt
 $arrayDIO | Measure-Object -Average -Maximum -Minimum | Out-File  -Filepath C:\Details.txt -append
    
por Avadhani Y 25.07.2013 / 09:42

1 resposta

0

Você está pegando um contador de desempenho que retorna os dados do processo para cada processo individual, além de todos os processos combinados em um contador (_Total). Você precisará filtrar pelo nome do processo para obter os dados de desempenho desse processo específico.

O motivo pelo qual você não tem dados é porque o comando Get-WMIObject retorna uma matriz de objetos ManagementBaseObject, cada um contendo o atributo IOWriteOperationsPersec , mas a matriz não contém esse atributo em si. Você acaba com uma matriz $arrayDIO vazia e, portanto, sem dados de desempenho para Measure-Object .

Veja o código atualizado na linha 5 do seu exemplo:

$arrayDIO += % { (Get-WmiObject Win32_PerfFormattedData_PerfProc_Process | Where-Object { $_.Name -eq "_Total"}).IOWriteOperationsPersec }

Onde coloquei "_Total" , você pode substituir isso pelo nome real do processo para o qual deseja obter os dados do contador ou simplesmente deixá-lo como está para recuperar o total de todos os processos.

EDITAR:

Para fazer isso funcionar no Physical Disk Writes, você precisa usar um contador de desempenho diferente ( link ).

Experimente:

$arrayDIO += % { (Get-WmiObject Win32_PerfRawData_PerfDisk_PhysicalDisk | Where-Object { $_.Name -like "0*"}).DiskWriteBytesPersec /1024 }

/1024 converte o contador de Bytes para MB e "0*" seleciona o ID do disco. Se você tiver vários discos, precisará alterar isso para o ID do disco correto.

    
por 25.07.2013 / 22:51

Tags