HOWTO · PowerShell

Cómo ejecutar un script de PowerShell sin mostrar una ventana

Ejecute scripts de PowerShell con una ventana oculta o el Programador de tareas, y comprenda los límites del contexto de inicio, los archivos por lotes y las alternativas de servicio.

En esta página

En Windows, inicie un script con powershell.exe -NoProfile -WindowStyle Hidden -File "C:\Scripts\Task.ps1", reemplazando la ruta entre comillas por la ruta absoluta de su script. El parámetro -WindowStyle Hidden controla la apariencia de la ventana de PowerShell; no garantiza que cada iniciador o aplicación secundaria permanezca invisible.

Ejecutar PowerShell con -WindowStyle Hidden

Use el comando anterior desde un iniciador de Windows como el cuadro de diálogo Ejecutar. -File identifica el script; las comillas protegen las rutas que contienen espacios. -NoProfile omite los scripts de inicio del perfil, por lo que su tarea debe cargar sus propias dependencias.

La visibilidad de la ventana depende del host y del contexto de inicio: una consola puede aparecer brevemente durante el inicio. No confíe en este comando para ocultar una terminal ya abierta. Las aplicaciones iniciadas por el script pueden mostrar sus propias ventanas. Una ventana oculta tampoco oculta el proceso del Administrador de tareas.

Las instrucciones de inicio de Windows de este artículo son ilustraciones no ejecutadas; no se proporciona ningún comportamiento de ventana observado ni salida de comando.

Iniciar el script desde un archivo por lotes

Guarde dos líneas en run_script.bat: primero @echo off, luego powershell.exe -NoProfile -WindowStyle Hidden -File "C:\Scripts\Task.ps1". Reemplace la ruta antes de ejecutarlo.

@echo off suprime el eco de comandos en la consola por lotes. No oculta esa consola, no suprime la salida del script ni evita un destello al inicio. Un archivo por lotes es conveniente para inicios repetidos, pero el Programador de tareas se adapta mejor al trabajo desatendido sin una consola interactiva.

Ejecutar el script con el Programador de tareas

  1. Abra el Programador de tareas, elija Crear tarea y dé a la tarea un nombre descriptivo.
  2. En General, seleccione una cuenta con acceso al script y sus recursos. Para trabajo desatendido, elija Ejecutar tanto si el usuario ha iniciado sesión como si no y proporcione credenciales si se le solicitan. Esto usa un contexto no interactivo; los scripts que requieren interacción con el escritorio pueden fallar. Habilite Ejecutar con los privilegios más altos solo cuando la tarea requiera elevación y la cuenta esté autorizada para ello. La elevación no controla la visibilidad.
  3. En Desencadenadores, añada la programación o el evento que necesite.
  4. En Acciones, elija Nuevo e Iniciar un programa. Seleccione el ejecutable powershell.exe instalado. En Agregar argumentos, introduzca -NoProfile -NonInteractive -WindowStyle Hidden -File "C:\Scripts\Task.ps1". Establezca Iniciar en en C:\Scripts sin comillas, adaptando ambas rutas. -NonInteractive evita que las solicitudes de entrada esperen a un usuario; no oculta ventanas.
  5. Guarde la tarea, haga clic con el botón derecho sobre ella y elija Ejecutar para una prueba manual. Esto la inicia inmediatamente sin esperar a su desencadenador. Inspeccione su historial, el Resultado de la última ejecución y los registros del script.

Usar PSExec o NSSM solo para tareas adecuadas

PSExec, de Microsoft Sysinternals, es adecuado para la administración remota o la ejecución bajo otra cuenta. Su opción -d significa no esperar, y -s selecciona la cuenta SYSTEM; ninguna es un interruptor para ocultar ventanas. SYSTEM tiene un acceso a los recursos diferente al de su cuenta de usuario. Estas opciones son innecesarias para inicios ocultos ordinarios.

NSSM (Non-Sucking Service Manager) envuelve aplicaciones como servicios de Windows. Obténgalo de su sitio oficial de descarga, https://nssm.cc/download. La instalación de un servicio requiere derechos administrativos. Configure deliberadamente el ejecutable de PowerShell, los argumentos del script, el directorio de trabajo, la cuenta del servicio, el registro y el comportamiento de reinicio. Úselo para cargas de trabajo similares a un servicio que no necesitan un escritorio interactivo; un script programado corto normalmente solo necesita el Programador de tareas. La omisión de la política de ejecución cambia el manejo de la política de scripts, no la visibilidad de las ventanas, y no es necesaria para ocultar una ventana.

Probar el script y elegir el método correcto

Primero ejecute su script de forma visible bajo la cuenta prevista. Compruebe los permisos de archivo, las dependencias, las rutas absolutas y los mensajes de la política de ejecución. Las cuentas programadas pueden carecer de sus unidades asignadas o de la configuración de su perfil. Guarde la salida y los errores en una ubicación en la que esa cuenta pueda escribir; una ventana que desaparece no es prueba de éxito.

Este ejemplo de registro de PowerShell autocontenido no está ejecutado. Escribe un mensaje de finalización en un archivo temporal, lo lee y elimina el archivo después:

$logPath = [System.IO.Path]::GetTempFileName()
try {
    'Task completed' | Set-Content -LiteralPath $logPath
    Get-Content -LiteralPath $logPath
}
finally {
    Remove-Item -LiteralPath $logPath
}

Para su script real, conserve un archivo de registro estable y registre los fallos además de la finalización. Elija el inicio directo para un uso ocasional, un archivo por lotes por comodidad, el Programador de tareas para desencadenadores desatendidos o NSSM para una carga de trabajo de servicio. Compruebe el comportamiento dependiente del escritorio en la máquina Windows de destino antes de confiar en cualquier inicio oculto.