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