Powershell使用id进程获取特定的进程计数器

时间:2012-06-16 22:32:39

标签: powershell process counter

我想获得具有进程ID的进程的特定计数器。但是我想不出一种方法来使用where-object来匹配计数器的进程。 像

Where Gc '\process(*)\id process -eq 456 gc '\process($name)\working set'

因此,请使用进程ID来检索名称并获取工作集(或其他类似的效果)。

4 个答案:

答案 0 :(得分:6)

为具有相同进程名称的多个实例的进程获取正确的性能计数器路径似乎有点费解:

$proc_id=6580
$proc_path=((Get-Counter "\Process(*)\ID Process").CounterSamples | ? {$_.RawValue -eq $proc_id}).Path
Get-Counter ($proc_path -replace "\\id process$","\% Processor Time")

Timestamp                 CounterSamples
---------                 --------------
11/20/2014 5:39:15 PM     \\myhost\process(conhost#2)\% processor time :
                          0

答案 1 :(得分:5)

您可以获取进程名称的计数器,因此首先使用其ID获取进程名称,然后将进程名称嵌入到计数器中。例如:

$id = # your process id
$proc = (Get-Process -Id $id).Name
Get-Counter -Counter "\Process($proc)\% Processor Time"

答案 2 :(得分:1)

使用get-process命令行开关很容易。只需使用where-object过滤所需进程ID的输出,然后选择您感兴趣的参数:

get-process | where-object{ $_.id -eq 456 } | select name,workingset

答案 3 :(得分:1)

如果您想要一个也包含具有多个实例ID的流程的解决方案,您可以使用:

$p = $((Get-Counter '\processus(*)\id de processus' -ErrorAction SilentlyContinue).CounterSamples | % {[regex]$a = "^.*\($([regex]::Escape($_.InstanceName))(.*)\).*$";[PSCustomObject]@{InstanceName=$_.InstanceName;PID=$_.CookedValue;InstanceId=$a.Matches($($_.Path)).groups[1].value}})
$id = # your process id
$p1 = $p | where {$_.PID -eq $id}
Get-Counter -Counter "\Process($($p1.InstanceName+$p1.InstanceId))\% Processor Time"
# In french
# Get-Counter -Counter "\Processus($($p1.InstanceName+$p1.InstanceId))\% temps processeur"