【问题标题】:PowerShell: Get Processor Utilization of a Process Using Proc IDPowerShell:使用 Proc ID 获取进程的处理器利用率
【发布时间】:2019-11-01 14:59:33
【问题描述】:

我正在尝试使用 ID 获取进程的处理器利用率。我需要观察一个进程何时使用 0% CPU。问题是我可以有多个同名的进程,所以使用

get-counter -Counter "\Processor(<process Name>)\% Processor Time"

因为它可能会捕获具有相同名称的不同进程。我也不能把它放在工作中,因为我试图捕获的进程是命令行的子进程,它会立即变为 0%。

我希望我能够根据 ID 或其他一些明显特征仅获得一个进程的处理器百分比。

我确实在整个网站和一般网络上进行了在线搜索,并且可以找到关于通过名称查找它而不是进程 ID 的文章。

【问题讨论】:

  • 您可以从相关柜台获取ID:get-counter -Counter "\Processor(&lt;process Name&gt;)\ID Process"
  • 所以我已经有了 ID,但我需要能够将 ID 与处理器时间联系起来。返回只给了我 ID,但没有给出 ID 和 CPU 利用率,因此无法将两者关联起来。除非我错过了一块。
  • $cpu = (Get-Process -Id 42820).Cpu 怎么样?
  • ".CPU" 实际上是 CPU 使用时间。它将不断向上计时,直到进程关闭。我找到了我的答案。需要一点数学知识和一些 WMIObjects 才能得到它。

标签: powershell


【解决方案1】:

所以我最终想出了如何做到这一点。使用 WMI 对象“Win32_perfFormattedData_PerfProc_Process”我能够获得处理器时间、线程,然后使用“Win32_ComputerSystem”我可以计算 (*)/

(((get-wmiobject -class Win32_PerfFormattedData_PerfProc_Process | where {$_.IDProcess -eq "<ID Number>"} | select idprocess, name, percentprocessortime, ThreadCount).percentprocessortime) * (Get-CimInstance Win32_ComputerSystem).NumberOfLogicalProcessors)/(get-wmiobject -class Win32_PerfFormattedData_PerfProc_Process | where { $_.idprocess -eq "<ID Number>" } | select idprocess, name, percentprocessortime, threadcount).Threadcount)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-31
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    相关资源
    最近更新 更多