2011-07-08 34 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

從來沒有想過它可能會這麼簡單! – Jack

+1

我認爲這不適用於0和1實例。看看我的答案。 –

+0

@roman好點 - 我喜歡你鑄造響應作爲數組 – 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 

雖然是簡單的有在這個解決方案有兩個要點:1)使用-ErrorAction 0(0是一樣的SilentlyContinue) ,以便在沒有指定的進程時運行良好; 2)使用數組運算符@(),以便在存在單個流程實例時運行。

1

有一個不錯的單行:(ps).count

+0

OP詢問同名過程計數。這有什麼幫助? – hypers

相關問題