Aprendamos a usar PowerShell para verificar si se está ejecutando una aplicación o proceso específico; cómo reiniciarlo automáticamente en caso de un bloqueo, si un usuario lo cerró accidentalmente o si comienza a consumir una gran cantidad de memoria (pérdida de memoria).
Anteriormente mostramos cómo administrar los procesos de Windows usando PowerShell. Para asegurarse de que el proceso notepad.exe se esté ejecutando y reiniciarlo, puede usar el siguiente script:
If (!(Get-Process -Name notepad -ErrorAction SilentlyContinue))
{Invoke-Item C:Windowsnotepad.exe
}
Puede reiniciar automáticamente un proceso si no responde (se bloquea) o si comenzó a usar demasiada memoria (más de 1000 MB en este ejemplo):
$proc = Get-Process -Name notepad| Sort-Object -Property ProcessName -Unique
If (($proc.Responding -eq $false) –or ($proc.WorkingSet -GT 1000000*1024)} {
$proc.Kill()
Start-Sleep -s 10
Invoke-Item C:Windowsnotepad.exe
}
Usando PowerShell for bucle, puede crear un bucle sin fin que inicie un proceso, verifique cada 60 segundos si se está ejecutando y lo reinicie si es necesario:
for(;;){
try{
If (!(Get-Process -Name notepad -ErrorAction SilentlyContinue))
{Invoke-Item C:Windowsnotepad.exe}
$proc = Get-Process -Name notepad | Sort-Object -Property ProcessName -Unique -ErrorAction SilentlyContinue
If (!$proc -or ($proc.Responding -eq $false) –or ($proc.WorkingSet -GT 200000*1024)) {
$proc.Kill()
Start-Sleep -s 10
Invoke-Item C:Windowsnotepad.exe}
}
catch { }
Start-sleep -s 60
}
$proc = Get-Process -ComputerName WKS-NYC211 -Name notepad | Sort-Object -Property ProcessName -Unique -ErrorAction SilentlyContinue
Para iniciar un proceso de forma remota, puede usar el cmdlet Invoke-Command:
Invoke-Command -ComputerName WKS-NYC211 -Credential $Cred -ScriptBlock {Start-Process C:Windowsnotepad.exe -wait -verb runas;}
Puede ejecutar este script de PowerShell como un script de inicio de sesión de GPO en el inicio de sesión del usuario.
Luego, guarde el código de PowerShell en un archivo con la extensión * .PS1. Puede firmar el script con una firma digital, cambiar la configuración de la política de ejecución de PowerShell o ejecutar el script con el –ExecutionPolicy Bypass opción.
- Nombre del archivo:
%windir%System32WindowsPowerShellv1.0powershell.exe - Opciones de ejecución:
-windowstyle hidden -ExecutionPolicy Bypass –Noprofile -file %~dp0CheckProcess.ps1
También puede ejecutar un script de PS1 según lo programado utilizando el Programador de tareas. Utilice las mismas opciones de ejecución. También puede especificar una cuenta de usuario con la que desea ejecutar el proceso.
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-windowstyle hidden -ExecutionPolicy Bypass -file %windir%CheckProcess.ps1"
$Trigger= New-ScheduledTaskTrigger -AtLogon
$Principal=New-ScheduledTaskPrincipal -UserId "jsmith" -LogonType Interactive
$Task=New-ScheduledTask -Action $Action -Trigger $Trigger -Principal $Principal
Register-ScheduledTask -TaskName "Check Notepad Process" -InputObject $Task
O puede ejecutar este script de PowerShell como un servicio de Windows.
services.msc consola o con PowerShell. Windows tiene una función incorporada para reiniciar los servicios, o puede reiniciar un servicio colgado de la siguiente manera. 




