2011-07-08 22 views
6

Czy są jakieś pomysły dotyczące napisania funkcji, która zwraca liczbę wystąpień procesu?Wykrywanie liczby uruchomionych procesów o tej samej nazwie

Być może coś takiego?

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

    return $i 
} 

Edit: Rozpoczął napisać funkcję ... To działa dla jednej instancji, ale przechodzi w nieskończonej pętli, jeśli więcej niż jedna instancja działa:

Odpowiedz

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

EDIT: dodano w trybie cichym kontynuuj i odtwórz tablicę do pracy z zerowym i jednym procesem.

+0

Nigdy nie sądziłem, że to takie proste! – Jack

+1

Myślę, że to nie działa dobrze dla instancji 0 i 1. Spójrz na moją odpowiedź. –

+0

@roman dobry punkt - podoba mi się, że rzuciłeś odpowiedź jako tablicę – Matt

5

Jest znacznie łatwiejszy w obsłudze wbudowany cmdletu grupy należą:

get-process | Group-Object -Property ProcessName 
9

Działa to dla mnie:

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 

wyjściowa:

0 
1 
2 

Choć jest to proste istnieją dwa ważne punkty tego rozwiązania: 1) używać -ErrorAction 0 (0 jest taka sama jak SilentlyContinue) , dzięki czemu działa dobrze, gdy nie ma określonych procesów; 2) użyj operatora tablic @(), aby działał, gdy istnieje jedna instancja procesu.

1

Istnieje niezła wkładka: (ps).count

+0

OP zapytał o tę samą liczbę procesów. Jak to pomaga? – hypers

Powiązane problemy