2011-07-08 28 views
6

とプロセスのインスタンスの数が実行されている返す関数を作成する方法の任意のアイデアを実行しているプロセスの数を検出しますか?は、同じ名前

おそらく、このような何か?

function numInstances([string]$process) 
{ 
    $i = 0 
    while(<we can get a new process with name $process>) 
    { 
     $i++ 
    } 

    return $i 
} 

編集:関数を書き始めた...それは単一のインスタンスのために動作しますが、複数のインスタンスが実行されている場合には、無限ループに入る:

答えて

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

EDIT:追加0と1つのプロセスで動作するように静かに続行して配列をキャストします。

+0

それほど簡単なことは考えられませんでした! – Jack

+1

これは、0と1のインスタンスでうまく動作しないと思います。私の答えを見てください。 –

+0

@ローマンポイント - 私はあなたが配列としてレスポンスをキャストしたのが好きです。 – Matt

5

その方がはるかに簡単に使用しますビルトインレット基オブジェクト:

get-process | Group-Object -Property ProcessName 
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 

を、2つの重要なポイントは、このソリューションであるシンプルですが:1)-ErrorAction 0を使用します(0はSilentlyContinueと同じです)指定されたプロセスがない場合はうまく動作します。 2)アレイ演算子@()を使用して、単一のプロセスインスタンスが存在する場合に動作するようにします。

1

素敵なワンライナーがあります:(ps).count

+0

OPは同じ名前のプロセスカウントについて尋ねます。これはどのように役立ちますか? – hypers

関連する問題