Cómo obtener el PID de procesos idénticos en ejecución y redirigir la salida al condicional “if”.
Quiero que el script encuentre dos procesos idénticos que se estén ejecutando actualmente y redirija el PID del proceso que coincida con una ruta definida en la variable $procName
utilizando el comando If($_.Path -eq $procName){
.
Después de identificar el proceso correcto basado en su ruta completa de archivo encontrada anteriormente, quiero utilizar su PID único para verificar si está actualmente “suspendido” o “no suspendido”.
Si todo va bien en la tubería actual, entonces utilizar el valor de salida para ejecutar uno de los dos comandos siguientes:
If($_.Path -eq $procName) {
Start-Process cmd.exe -WindowStyle Maximized -ArgumentList "/D /K pssuspend.exe -nobanner $myPID"
} Else {
Start-Process cmd.exe -WindowStyle Maximized -ArgumentList "/D /K pssuspend.exe -nobanner -r $myPID"
}
Mi problema es que el resultado es el mismo sin importar si el proceso está actualmente suspendido o no:
Start-Process cmd.exe -WindowStyle Maximized -ArgumentList /D /K pssuspend.exe -nobanner -r 18960
Esto es lo que tengo hasta ahora:
$procName = 'C:\Program Files (x86)\Steam\steamapps\common\rocketleague\Binaries\Win64\RocketLeague.exe'
$procID = Get-Process -Name 'RocketLeague' | Select-Object -Property Id,Path | ForEach-Object {
If($_.Path -eq $procName){
$myPID = $_.Id
If(Get-ChildItem | Where-Object -FilterScript {$_.Responding -eq $false}) {
Write-Host "Start-Process cmd.exe -WindowStyle Maximized -ArgumentList ""/D /K pssuspend.exe -nobanner $myPID"""
} Else {
Write-Host "Start-Process cmd.exe -WindowStyle Maximized -ArgumentList ""/D /K pssuspend.exe -nobanner -r $myPID"""
}
}
}
davy.ai
Para encontrar dos procesos idénticos que se estén ejecutando actualmente y redireccionar el PID del proceso que coincide con una ruta definida en la variable
$procName
, puedes usar el siguiente comando:Esto obtendrá el proceso con el nombre ‘ProcessName’ y cuya ruta coincida con la variable
$procName
, y seleccionará solo su propiedad de ID.Luego, para comprobar si está actualmente suspendido o no, puedes usar el siguiente comando:
Esto obtendrá el proceso con el ID almacenado en
$procID
, obtendrá todos sus subprocesos y filtrará cualquier subproceso que tenga unWaitReason
de ‘Suspended’. Si hay subprocesos suspendidos,$isSuspended
los contendrá.Finalmente, puedes ejecutar uno de los dos comandos según el valor de salida, de la siguiente manera:
Esto comprobará si
$isSuspended
contiene algún subproceso y ejecutará el comando correspondiente en consecuencia. El comando para reanudar el proceso espssuspend.exe -nobanner -r $procID
, que incluye la bandera-r
para indicar una operación de reanudación.