URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

PowerShellでパフォーマンスカウンターを利用する

 Windows パフォーマンスカウンターのデータを保存する場合はデータコレクターセットを作成するのが一般的だと思います。
 ただ、都度設定するのが面倒なので、もっと気軽に使うためにPowerShellスクリプトでやってみることにしました。


 そんなわけで、スクリプトはこんな感じです。


$Counters = ( "\Processor(_total)\% Idle Time", "\Memory\Available MBytes", "\Network Interface(*)\Bytes Total/sec" ) Set-Location $PSScriptRoot $MyHost = $Env:Computername $DateTime = Get-Date -Format "yyyyMMddTHHmmss" Write-Output "If closing data collection, press [Ctrl] + [C]." Get-Counter -Counter $Counters -Continuous | foreach { $DataObject = New-Object PSObject | Add-Member -PassThru NoteProperty TimeStamp $_.TimeStamp $_.CounterSamples | foreach { $DataObject | Add-Member NoteProperty $_.Path $_.CookedValue } $DataObject } | Export-Csv -NoTypeInformation -Path .\PerfData-$MyHost-$DateTime.csv exit

 スクリプトを実行するとデータ収集が始まり、[Ctrl] + [C]を押下して終了するとスクリプトと同じ場所にCSVファイルとして出力します。
 変数"$Counters"で指定している収集対象カウンターは、"Get-Counter -ListSet "*" | Select -ExpandProperty Paths"で表示された中から必要なものを選択します。
 カウンター名で"(*)"にしている部分は、分かっているなら具体的な対象を指定することもできます。

 とりあえずこれを作る切っ掛けになったお仕事で使うには十分なんだけど、このままだと[Ctrl] + [C]を押下せずにターミナルを閉じてしまった場合等にデータが保全されないので、リアルタイムでCSVファイルへ出力するようにしたいですね。