2011-07-08 32 views
6

Bất kỳ ý tưởng nào về cách viết hàm trả về số lượng phiên bản của một tiến trình đang chạy?Phát hiện số quá trình đang chạy với cùng tên

Có lẽ một cái gì đó như thế này?

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

    return $i 
} 

Edit: Bắt đầu viết một hàm ... Nó làm việc cho một trường hợp duy nhất nhưng nó đi vào một vòng lặp vô hạn nếu có nhiều hơn một ví dụ đang chạy:

Trả lời

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

EDIT: thêm âm thầm tiếp tục và dàn diễn viên mảng hoạt động với 0 và một quy trình.

+0

Không bao giờ nghĩ rằng nó có thể đơn giản như vậy! – Jack

+1

Tôi nghĩ rằng điều này không hoạt động tốt cho trường hợp 0 ​​và 1. Hãy nhìn vào câu trả lời của tôi. –

+0

@ roman điểm tốt - tôi thích rằng bạn đã đưa ra phản hồi dưới dạng một mảng – Matt

5

của nó dễ dàng hơn để sử dụng được xây dựng trong cmdlet nhóm đối tượng:

get-process | Group-Object -Property ProcessName 
9

này làm việc cho tôi:

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 

Mặc dù nó rất đơn giản có hai điểm quan trọng trong giải pháp này: 1) sử dụng -ErrorAction 0 (0 cũng giống như SilentlyContinue) , để nó hoạt động tốt khi không có quy trình cụ thể; 2) sử dụng toán tử mảng @() để nó hoạt động khi có một cá thể tiến trình đơn lẻ.

1

Có một lớp lót đẹp: (ps).count

+0

OP hỏi về cùng một quá trình đếm tên. Điều này giúp ích như thế nào? – hypers

Các vấn đề liên quan