前回の質問のフォローアップとして、生成され、1秒-Continuous
間隔 (デフォルト) で継続的にサンプリングされるStart-Job
perfmonカウンターのリストをコンパイルしたいと思います。Receive-job
( -Average, -Sum, -Minimum, -Maximum
)。
私が今抱えている問題は、絶対カウンターパスを使用すると、ジョブが開始され、「実行中」の状態のままになることです。パフォーマンス カウンター文字列の配列を反復処理しようとすると、ジョブの状態が "完了" になります。
動作しない結果と動作する結果を示す 2 つのコード サンプルを次に示します。
うまくいきません。ジョブの状態 -Continuous が設定されていても完了します。エラーは発生しません。
$jobs=@{}
$counters=@("\Processor(*)\% Processor Time",
"\Network Interface(*)\Bytes Received/sec",
"\Network Interface(*)\Bytes Sent/sec")
foreach ($counterPath in $counters) {
$job=Start-Job {get-counter -Counter "$counterPath" -Continuous | foreach {$_.CounterSamples} }
$jobs[$job.id]=$counterPath
}
期待どおりに動作しますが、複数のカウンターがループを介してジョブを開始することはできません。
$jobs=@{}
$job=Start-Job {get-counter -Counter "\Processor(*)\% Processor Time" -Continuous | foreach {$_.CounterSamples} }
$jobs[$job.id]=$counter
結果の出力
PS C:\Users\msnow> $jobs=@{}
[string]$counter="\Processor(*)\% Processor Time"
$job=Start-Job {get-counter -Counter "$counter" -Continuous | foreach {$_.CounterSamples} }
$jobs[$job.id]=$counter
__________________________________________________________________________________________________________________________
PS C:\Users\msnow> $jobs=@{}
$job=Start-Job {get-counter -Counter "\Processor(*)\% Processor Time" -Continuous | foreach {$_.CounterSamples} }
$jobs[$job.id]=$counter
__________________________________________________________________________________________________________________________
PS C:\Users\msnow> Get-Job
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed True localhost get-counter -Counter "...
3 Job3 Running True localhost get-counter -Counter "...
__________________________________________________________________________________________________________________________
PS C:\Users\msnow> receive-job -id 3 | measure CookedValue -sum -Average
Count : 11466
Average : 5.20268509822716
Sum : 59653.9873362726
Maximum :
Minimum :
Property : CookedValue