Detect number of processes running with the same name
Any ideas of how to write a function that returns the number of instances of a process is running?
Perhaps something like this?
function numInstances([string]$process)
{开发者_如何学JAVA
$i = 0
while(<we can get a new process with name $process>)
{
$i++
}
return $i
}
Edit: Started to write a function... It works for a single instance but it goes into an infinite loop if more than one instance is running:
function numInstances([string]$process)
{
$i = 0
$ids = @()
while(((get-process $process) | where {$ids -notcontains $_.ID}) -ne $null)
{
$ids += (get-process $process).ID
$i++
}
return $i
}
function numInstances([string]$process)
{
@(get-process -ea silentlycontinue $process).count
}
EDIT: added the silently continue and array cast to work with zero and one processes.
This works for me:
function numInstances([string]$process)
{
@(Get-Process $process -ErrorAction 0).Count
}
# 0
numInstances notepad
# 1
Start-Process notepad
numInstances notepad
# many
Start-Process notepad
numInstances notepad
Output:
0
1
2
Though it is simple there are two important points in this solution: 1) use -ErrorAction 0
(0 is the same as SilentlyContinue
), so that it works well when there are no specified processes; 2) use the array operator @()
so that it works when there is a single process instance.
Its much easier to use the built-in cmdlet group-object:
get-process | Group-Object -Property ProcessName
There is a nice one-liner : (ps).count
(Get-Process | Where-Object {$_.Name -eq 'Chrome'}).count
This will return you the number of processes with same name running. you can add filters to further format your data.
精彩评论