Búsqueda de sitios web

PowerShell: Cómo reiniciar automáticamente las aplicaciones cuando estaban cerradas


Si desea una aplicación siempre iniciada y disponible, este artículo es para usted. A veces, el usuario cierra una aplicación por error. Este artículo muestra un escenario paso a paso sobre cómo configurar una tarea programada observando el estado de su aplicación.

Requisitos previos

Bueno, vamos a utilizar un PowerShell de tres pulgadas. Para la ejecución de archivos de script de PowerShell, debemos echar un vistazo a la política de ejecución de PowerShell. Asegúrese de que la configuración de la política esté configurada en firma remota (recomendado) o sin restricciones.

Get-ExecutionPolicy

Si ves Restringido, ejecuta

Set-ExecutionPolicy remotesigned -Force

Script de PowerShell para comprobar el estado de la aplicación (iniciada/no iniciada)

Abra PowerShell ISE. (Escriba ise en PowerShell). Copie el código en su sesión ISE.

If (!(Get-Process -Name notepad.exe -ErrorAction SilentlyContinue))
{Invoke-Item C:\Windows\notepad.exe
}

Quedémonos aquí para una breve explicación. La instrucción If comprueba si notepad.exe se está ejecutando. El ! al comienzo del comando hay una declaración NOT. Sólo si el Bloc de notas no se está ejecutando, Invoke-Item iniciará el Bloc de notas nuevamente.

Guarde el guión. Lo llamo notepad.ps1.

Ahora podemos continuar y poner el script en una tarea programada. Desafortunadamente, debo decirles que esta no es una buena idea. ¿Por qué? PowerShell aparecerá cada vez que se ejecute el script. Eso es molesto. La buena noticia: tengo una solución para eso. ¡Llamamos al script de PowerShell desde un script de VB!

Creando el script VB

Abra el bloc de notas. Escriba lo siguiente:

command = "powershell.exe -nologo -command C:\Temp\notepad.ps1"
set shell = CreateObject("WScript.Shell")
shell.Run command,0

Configurar una tarea programada para que se ejecute cada 60 segundos

Abra PowerShell ISE. Primero, piense para qué usuario desea crear la tarea. En el siguiente ejemplo de código, la tarea se configurará para la cuenta de usuario local patrick. Preste también atención a la ruta de su script VB (Línea 1):

$Action=New-ScheduledTaskAction -Execute "C:\Temp\notepad.vbs"
$Trigger=New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 1)
$Set=New-ScheduledTaskSettingsSet
$Principal=New-ScheduledTaskPrincipal -UserId "patrick" -LogonType Interactive
$Task=New-ScheduledTask -Action $Action -Trigger $Trigger -Settings $Set -Principal $Principal
Register-ScheduledTask -TaskName "Start Notepad" -InputObject $Task

Cuando Patrick inicia sesión y si el Bloc de notas no está iniciado, la tarea lo iniciará. Eso sucede cada 60 segundos. No se admiten configuraciones de menos de 1 minuto.

Sin dolor no hay ganancia

Fin del tema.

Escribir ese script de tarea programada fue una pesadilla. Tuve un error tipográfico y lógico y no pude encontrarlos durante más de una hora. Sin dolor no hay ganancia. ?

No te preocupes. Todo lo anterior está funcionando. ¡Diviértete con eso!

Pensamientos adicionales

Si te gustan las tareas programadas y PowerShell, echa un vistazo a mis artículos.

Cómo programar la instalación de software con PowerShell

Configurar el inicio automático de PowerShell en cada inicio de sesión

Artículos relacionados