我的脚本监视进程的CPU使用情况,每5秒循环一次代码并将其写入文件。哪个工作正常。
但我发现当一个新进程运行时,我的脚本将无法找到它,直到我停止脚本并重新运行它。
此外,如果进程结束/停止,脚本会出现此错误:
获取计数器:其中一个性能计数器样本中的数据是 无效。查看每个的Status属性 PerformanceCounterSample对象,以确保它包含有效数据。
在第2行:34:
PowerShell似乎只检索一次Process信息并缓存它。
如果我运行波纹管脚本(这是我所有脚本的一部分),它运行完美:
while($true) {
$ProcessId = (Get-Counter "\Process(*)\ID Process").CounterSamples
$ProcessId.count
Start-Sleep -s 5
}
如果我有50个进程,它将给出50,但如果一个新进程启动它将继续给50,直到我重新启动脚本。
如果我停止任何过程,它将在上面给出相同的错误。
知道如何解决此问题并强制PowerShell重新启动进程列表而不重新启动脚本吗?
答案 0 :(得分:1)
您可以使用PowerShell作业在每次迭代的新后台进程中执行它,并使用-ErrorAction SilentlyContinue
来抑制在检查过程中停止一个或多个进程时可能出现的错误消息:
while($true) {
$ProcessId = Start-Job -ScriptBlock { (Get-Counter "\Process(*)\ID Process" -ErrorAction SilentlyContinue).CounterSamples } | Wait-Job | Receive-Job
$ProcessId.Count
Start-Sleep -Seconds 5
}