我正在尝试使用Get-Counter '\process(APPNAME)\% processor time
但是对于许多进程APPNAME
重复。我可以在APPNAME#1
中使用APPNAME#2
,APPNAME#3
,Get-Counter '\process(APPNAME#2)\% processor time
。但是,我无法找到如何从PID中获取“完整”的appname(即其中包含#的那个),这可能吗?
第二个答案here似乎可以解释它,但我并不完全明白他们在做什么。
答案 0 :(得分:1)
很难准确地帮助您,因为计数器对文化非常敏感,而且我懒得启动我的美国虚拟机。
您可以使用以下方法找到流程的PID:
Timestamp CounterSamples
--------- --------------
29/10/2015 08:31:55 \\ComputerName\processus(chrome#4)\id de processus :
3296
对我而言,它给出了:
Get-Counter '\\ComputerName\process(chrome#4)\process id'
对于英国或美国,我会尝试:
(Get-Counter '\processus(*)\id de processus').CounterSamples | % {[regex]$a = "^.*\($([regex]::Escape($_.InstanceName))(.*)\).*$";[PSCustomObject]@{InstanceName=$_.InstanceName;PID=$_.CookedValue;InstanceId=$a.Matches($($_.Path)).groups[1].value}}
这一行(你必须适应你的文化)给出一个带有PID和计数器实例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"
编辑:
所以这是一个输入PID的解决方案:
{{1}}
答案 1 :(得分:0)
你需要这样的东西,选择你需要的东西,然后把它们连在一起。
Get-Process | Select ProcessName,Id | % {$_.ProcessName + " " + $_.Id}