10

关于如何编写一个返回正在运行的进程实例数的函数的任何想法?

也许是这样的?

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
}
4

5 回答 5

18
function numInstances([string]$process)
{
    @(get-process -ea silentlycontinue $process).count
}

编辑:添加了静默继续和数组转换以使用零和一进程。

于 2011-07-08T11:44:35.850 回答
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) 使用数组运算符@(),以便它在有单个流程实例时工作。

于 2011-07-08T11:47:57.750 回答
7

使用内置的 cmdlet 组对象要容易得多:

 get-process | Group-Object -Property ProcessName
于 2011-07-08T11:43:58.753 回答
5

有一个很好的单线:(ps).count

于 2017-03-08T19:29:21.770 回答
1

(Get-Process | Where-Object {$_.Name -eq 'Chrome'}).count

这将返回您正在运行的同名进程的数量。您可以添加过滤器以进一步格式化您的数据。

于 2018-07-29T14:58:05.420 回答