有关如何编写返回进程实例数的函数的任何想法都在运行吗?
也许是这样的?
function numInstances([string]$process)
{
$i = 0
while(<we can get a new process with name $process>)
{
$i++
}
return $i
}
编辑:开始编写一个函数...它适用于单个实例,但如果运行多个实例则会进入无限循环:
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
}
答案 0 :(得分:12)
function numInstances([string]$process)
{
@(get-process -ea silentlycontinue $process).count
}
编辑:添加静默的continue和数组广播以使用零和一个进程。
答案 1 :(得分:9)
这对我有用:
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
输出:
0
1
2
虽然这很简单但是在这个解决方案中有两个要点:1)使用-ErrorAction 0
(0与SilentlyContinue
相同),这样当没有指定的进程时它就可以正常工作; 2)使用数组运算符@()
,以便在有单个流程实例时它可以工作。
答案 2 :(得分:6)
使用内置cmdlet组对象更容易:
get-process | Group-Object -Property ProcessName
答案 3 :(得分:4)
有一个很好的单行:(ps).count
答案 4 :(得分:0)
(获取过程| Where-Object {$ _。Name -eq'Chrome'})。count
这将返回运行相同名称的进程数。您可以添加过滤器以进一步格式化数据。