stop start script powershell process instances

powershell - start - Detecta el número de procesos que se ejecutan con el mismo nombre



start-process powershell (4)

Es mucho más fácil usar el objeto de grupo de cmdlet incorporado:

get-process | Group-Object -Property ProcessName

¿Se está ejecutando alguna idea sobre cómo escribir una función que devuelva el número de instancias de un proceso?

Tal vez algo como esto?

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

Editar: comenzó a escribir una función ... Funciona para una sola instancia pero entra en un ciclo infinito si se ejecuta más de una instancia:

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 }


Esto funciona para mí:

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

Salida:

0 1 2

Aunque es simple, hay dos puntos importantes en esta solución: 1) use -ErrorAction 0 (0 es lo mismo que SilentlyContinue ), para que funcione bien cuando no hay procesos especificados; 2) use el operador de matriz @() para que funcione cuando hay una sola instancia de proceso.


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

EDITAR : se agregó el silencioso continuar y el molde de matriz para trabajar con cero y uno procesa.


Hay un buen one-liner: (ps).count