Magic Quadrant™ para la gestión de acceso privilegiado 2025: Netwrix reconocida por cuarto año consecutivo. Descarga el informe.

Plataforma
Centro de recursosBlog
Cómo ejecutar un script de PowerShell desde el Programador de tareas

Cómo ejecutar un script de PowerShell desde el Programador de tareas

Sep 16, 2024

El Programador de tareas de Windows permite a los administradores ejecutar scripts de PowerShell automáticamente según un horario establecido o en respuesta a eventos del sistema. Esto mejora la consistencia, ahorra tiempo y reduce el error humano en tareas como copias de seguridad, actualizaciones, monitoreo y limpiezas. Los scripts se pueden programar a través de la interfaz gráfica de usuario o cmdlets de PowerShell (Register-ScheduledTask, New-ScheduledTaskTrigger, etc.). Las mejores prácticas incluyen el uso de cuentas con el mínimo privilegio, registro y manejo de errores, firma de scripts y revisiones regulares para prevenir mal uso.

Introducción

El Programador de tareas de Windows permite a los usuarios programar tareas para ejecutarse en una fecha y hora específicas, según un horario definido o cuando se desencadenan ciertos eventos. Esta herramienta integrada de los sistemas operativos Windows ayuda a mejorar la eficiencia y garantizar la ejecución confiable de tareas repetitivas. En este blog, te mostraremos cómo ejecutar un script de PowerShell desde el Programador de tareas y cómo crear tareas programadas utilizando PowerShell.


Configuración de scripts de PowerShell para automatización

Comprender el Programador de tareas

La biblioteca del Programador de tareas es una colección de todas las tareas definidas, organizadas en carpetas. Para cada tarea, la interfaz gráfica de usuario proporciona las siguientes pestañas:

  • General — El nombre y la descripción de las tareas, la cuenta bajo la cual deben ejecutarse y otras opciones de seguridad.
  • Disparadores — Las condiciones que inician una tarea, que pueden ser basadas en tiempo (por ejemplo, diarias, semanales), basadas en eventos (por ejemplo, al iniciar el sistema o al iniciar sesión el usuario), o personalizadas
  • Acciones — Las operaciones ejecutadas cuando se activa una tarea, como iniciar un programa.
  • Condiciones — Criterios que controlan la ejecución de una tarea basada en el estado del ordenador, como ejecutarse solo cuando el ordenador ha estado inactivo durante un período específico
  • Configuraciones — Configuraciones adicionales que determinan cómo y cuándo se ejecuta una tarea, como reiniciar una tarea si falla o detenerla si se ejecuta más tiempo del esperado
  • Historia — Un historial de ejecuciones de tareas, incluyendo horas de inicio, horas de fin y cualquier error o advertencia encontrada
Image

Beneficios de usar Task Scheduler para automatizar scripts de PowerShell

Automatizar scripts de PowerShell a través del PowerShell Task Scheduler ofrece muchos beneficios, incluyendo los siguientes:

  • Ahorro de tiempo — Cuando ejecutas scripts de PowerShell desde el Programador de tareas, puedes ahorrar una cantidad considerable de tiempo que de otra manera se gastaría en ejecución manual. Esto es particularmente beneficioso para scripts que necesitan ejecutarse fuera del horario laboral.
  • Consistencia — La automatización reduce el riesgo de errores humanos. Un script de PowerShell programado ejecutará exactamente las mismas operaciones en el mismo orden cada vez.
  • Fiabilidad — Con el Programador de tareas, puedes garantizar que las tareas críticas de mantenimiento, como las rutinas de respaldo y limpieza, se ejecuten regularmente. Esto aumenta la fiabilidad del sistema y reduce el riesgo de pérdida de datos o fallos del sistema.
  • Eficiencia de recursos — Al programar scripts para que se ejecuten durante períodos de baja utilización del sistema, puede asegurarse de que las tareas intensivas no degraden el rendimiento del sistema durante las horas pico.
  • Flexibilidad — Task Scheduler ofrece una variedad de opciones de programación, incluyendo la capacidad de ejecutar tareas al inicio del sistema, en el inicio de sesión, cuando está inactivo o en respuesta a eventos específicos. Este nivel de control te permite personalizar la ejecución de scripts según tus requisitos específicos.
  • Manejo de errores — Puede configurar tareas programadas para intentar una nueva ejecución si un script falla, enviar correos electrónicos al completarse o fallar la tarea, y escribir registros de eventos. Esto permite la resolución de problemas a tiempo y lo mantiene informado sobre el estado de los procesos automatizados.
  • Seguridad — Con el Programador de tareas, los scripts de PowerShell pueden ejecutarse bajo cuentas de usuario específicas, incluidas aquellas con privilegios elevados, sin requerir que el usuario esté conectado. Esto ayuda a asegurar que las tareas sensibles se ejecuten de manera segura y permite la automatización de scripts que requieren mayores privilegios. Sin embargo, dado que los adversarios pueden explotar las tareas programadas y desencadenadas para fines maliciosos, deberías aprovechar un sistema de auditoría o seguimiento para monitorear las tareas en busca de posibles abusos. Netwrix Access Analyzer es un buen ejemplo de una herramienta que puede mitigar la actividad maliciosa.
  • Integración y extensibilidad — Programar scripts de PowerShell permite escenarios de automatización sofisticados que pueden reaccionar a eventos del sistema, orquestar múltiples tareas y más.
  • Gestión de flujos de trabajo complejos — El Programador de tareas puede gestionar flujos de trabajo complejos, como encadenar tareas o utilizar lógica condicional basada en el éxito o fracaso de una tarea anterior. Esto es invaluable para escenarios donde múltiples tareas interdependientes necesitan ser cuidadosamente orquestadas.
  • Facilidad de uso — A pesar de sus potentes características, Task Scheduler cuenta con una interfaz gráfica intuitiva que simplifica el proceso de configuración y gestión de tareas automatizadas. Para usuarios más avanzados, Task Scheduler también puede ser configurado y gestionado mediante herramientas de línea de comandos o cmdlets de PowerShell.

Pasos para crear un horario para un script de PowerShell

Antes de programar un script de PowerShell con Task Scheduler, asegúrate de que el script esté guardado con la extensión .ps1 y que haya sido probado para asegurar su correcto funcionamiento.

Luego siga los siguientes pasos:

  • Abra el Programador de tareas: Presione Win + R, escriba taskschd.msc en el cuadro de diálogo Ejecutar y presione Enter.
Image
  • En el panel Actions de la derecha, haga clic en Create Task.
  • En la pestaña General, haga lo siguiente:
  • Ingrese un nombre y descripción para su tarea.
  • Configure las opciones de seguridad apropiadas. Por ejemplo, seleccionar Ejecutar aunque el usuario no haya iniciado sesión garantizará que la tarea se ejecute incluso si no has iniciado sesión. Si el script requiere derechos administrativos, marque Ejecutar con los máximos privilegios.

Haga clic en OK para guardar los cambios.

Image
  • Vaya a la pestaña Triggers y haga clic en Nuevo. En el panel New Trigger, elija lo siguiente:
  • Cuando debe comenzar la tarea
  • La frecuencia con la que debe ejecutarse, como una vez, diariamente o semanalmente
  • Cualquier opción adicional que necesite, como detener la tarea si se ejecuta más tiempo del que especificó

Haga clic en OK para guardar los cambios.

Image
  • Vaya a la pestaña Actions. Haga clic en New para configurar una nueva acción para ejecutar su script de PowerShell:
  • Desde el menú desplegable Action, seleccione Iniciar un programa.
  • In the Program/script field, enter powershell.exe.
  • En el campo Add arguments, ingrese lo siguiente, asegurándose de especificar la ruta completa a su script: -File C:\Scripts\scriptname.ps1
  • En el campo Start in especifique el directorio donde se encuentra el script, si es necesario. Esto generalmente no es requerido a menos que su script dependa de rutas relativas.

Haga clic en OK para guardar los cambios

Image
  • Haga clic en OK y vaya a la pestaña de Conditions. Establezca cualquier condición bajo la cual la tarea deba ejecutarse. Por ejemplo, puede especificar que la tarea solo se ejecute si el ordenador está conectado a la corriente alterna o solo si está conectado a una red específica. Haga clic en OK para guardar sus selecciones.
Image
  • A continuación, vaya a la pestaña de Settings y configure lo siguiente:
  • Permitir que la tarea se ejecute bajo demanda — Marque esto si desea poder ejecutar la tarea manualmente.
  • Si la tarea falla — Especifique qué debe suceder si la tarea falla, como reiniciar la tarea.
  • Detenga la tarea si se ejecuta durante más tiempo que — Establezca un límite de tiempo si corresponde.
  • Si la tarea ya está en ejecución — Elija qué debe suceder si se activa la tarea pero ya está en ejecución.
Image
  • Haga clic en OK para finalizar su tarea. Se le solicitará que ingrese las credenciales para la cuenta de usuario bajo la cual se ejecutará la tarea.

Configuración avanzada y mejores prácticas

Controlando la ejecución de scripts y la visibilidad

Para controlar la ejecución de scripts y la visibilidad al usar Task Scheduler, puede utilizar los siguientes parámetros en el campo de Add arguments de la pestaña de Action:

  • NoExit — Agregue este parámetro para evitar que la ventana de PowerShell o símbolo del sistema se cierre automáticamente después de ejecutar el script. Esta opción es útil para depurar o cuando desea que la ventana de consola permanezca abierta para verificar la salida directamente.
  • Comando — Utilice este parámetro para especificar la ruta completa de un script a ejecutar y los argumentos necesarios.

Por ejemplo, podría especificar lo siguiente en el campo de Add arguments:

      -NoExit -Command -File C:\Scripts\InstallOfSoftware.ps1
      

Redirigiendo la salida a un archivo de texto u otros destinos para registrar la actividad del script

Solución de problemas comunes del Programador de tareas de Windows

Aquí hay algunos problemas comunes que pueden impedir que las tareas programadas se ejecuten como se espera y cómo resolverlos.

La tarea no se iniciará ni se ejecutará.

  • Asegúrese de que la cuenta de usuario que ejecuta la tarea tenga los permisos necesarios para ejecutar la tarea y acceder a cualquier archivo o directorio referenciado por la tarea.
  • Revise dos veces la configuración de la tarea, como los ajustes del disparador, parámetros de acción y condiciones.
  • Asegúrese de que la tarea esté habilitada.
  • Si la tarea utiliza una cuenta de usuario específica para ejecutarse, verifique si la contraseña ha sido cambiada y actualícela para la tarea si es necesario.

La tarea se ejecuta manualmente pero no de forma automática.

  • Verifique que la configuración del desencadenador sea correcta; los problemas comunes incluyen horarios de inicio incorrectos, horarios mal configurados.
  • Compruebe si hay condiciones que podrían impedir la ejecución de la tarea, como que solo se ejecute si el ordenador está inactivo durante un tiempo específico. Si la tarea está programada para ejecutarse en momentos de inactividad o cuando el ordenador no está en uso, configuraciones de energía como el modo de suspensión o hibernación pueden impedir la ejecución. Ajuste las configuraciones de energía para asegurar que el sistema permanezca activo para que la tarea se ejecute.

La tarea se detiene inesperadamente o se comporta de manera incorrecta.

  • Compruebe si hay suficiente memoria, CPU o espacio en disco disponible para que la tarea se ejecute sin problemas.
  • Si la tarea implica ejecutar un script, asegúrese de que el script se ejecute correctamente fuera del Programador de tareas. Considere cómo las variables de entorno, las rutas o los permisos podrían diferir en las dos situaciones.

La tarea falla con códigos de error específicos.

Consulte el código de error proporcionado en el historial de la tarea o en el registro de eventos para obtener información actualizada sobre el problema y cómo resolverlo.

La tarea se ejecuta pero no hace nada.

  • Verifique que la acción establecida para la tarea, por ejemplo, iniciar un programa, esté configurada correctamente.
  • Si el script no se está ejecutando debido a restricciones de política, considere agregar el argumento -ExecutionPolicy Bypass para anular la política de ejecución del sistema y permitir que el script se ejecute.
  • Asegúrese de que las rutas a los archivos ejecutables o scripts sean correctas y que los argumentos de línea de comandos estén debidamente especificados.
  • Si la tarea debe generar un archivo u otro destino, asegúrese de que las rutas sean correctas y que la cuenta en ejecución tenga los permisos de escritura necesarios.

Solicite una prueba gratuita de Monitor and Secure Scheduled Tasks

Ejemplos prácticos para casos de uso comunes

Ejemplos de scripts para tareas administrativas comunes

A continuación se presentan algunos casos de uso prácticos para tareas administrativas comunes que podrías querer automatizar utilizando el Programador de tareas de Windows, junto con ejemplos de scripts.

Hacer una copia de seguridad de una carpeta

El siguiente script se puede utilizar para hacer una copia de seguridad de una carpeta en la unidad C a una carpeta en la unidad D local:

      Copy-Item -Path "C:\Source\*" -Destination "D:\Backup" -Recurse -Force
      

Instalar actualizaciones de software

Para actualizar el software o los componentes del sistema automáticamente, utilice este script:

      Install-WindowsUpdate -AcceptAll -AutoReboot
      

Enviar notificaciones a usuarios

Para enviar recordatorios sobre eventos próximos a una lista de distribución de correo electrónico, utilice este script:

      Send-MailMessage -To "AbbeyCrawford@milkyway.com" -From "AbbeyTucker@milkyway.com" -Subject "Daily Meeting Reminder" -Body "This is a reminder about the meeting scheduled for 10:00 AM." -SmtpServer "smtp.milkyway.com"
      

Realizar escaneos de seguridad

Para ejecutar automáticamente análisis de seguridad para detectar malware o vulnerabilidades, utilice este script:

      Start-MpScan -ScanType QuickScan
      

Limpieza de archivos temporales

Este script elimina archivos temporales de los directorios especificados:

      Get-ChildItem -Path C:\Windows\Temp\*, $env:TEMP\* -Recurse | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
      

Reiniciar un servicio

Para reiniciar un servicio, como un servidor web o el servicio de Microsoft SQL server, puedes utilizar comandos como los siguientes:

      Restart-Service -Name W3SVC
      
      Restart-Service -Name MSSQLSERVER
      

Programación de scripts complejos de PowerShell

También puedes programar scripts de PowerShell más complejos. Como se ilustra en los ejemplos a continuación, es una buena práctica incluir comentarios que describan el propósito de las diferentes secciones de un script.

Informe sobre el uso del espacio en disco

Este script ofrece una visión general rápida del uso del espacio en disco:

      # Script to report disk space usage

Get-PSDrive -PSProvider FileSystem |

Select-Object Name, @{Name="UsedGB";Expression={"{0:N2}" -f (($_.Used - $_.Free)/1GB)}}, @{Name="FreeGB";Expression={"{0:N2}" -f ($_.Free/1GB)}}, @{Name="TotalGB";Expression={"{0:N2}" -f ($_.Used/1GB)}} |

Format-Table -AutoSize
      

Monitorear la salud del sistema

Para rastrear el rendimiento del sistema a lo largo del tiempo, puedes utilizar este script de PowerShell para registrar el uso de CPU, uso de memoria y espacio en disco en un archivo:

      # Define the log file path

$logFile = "C:\SystemHealthLog.txt"

# Function to get system health metrics

function Get-SystemHealth {

    # Get CPU usage

    $cpuUsage = Get-Counter '\Processor(_Total)\% Processor Time'

    # Get memory usage

    $memoryUsage = Get-Counter '\Memory\Available MBytes'

    # Get disk space usage for C: drive

    $diskSpace = Get-PSDrive -Name C

    $usedSpace = $diskSpace.Used / 1MB

    $freeSpace = $diskSpace.Free / 1MB

    $totalSpace = $diskSpace.Used + $diskSpace.Free / 1MB

    # Format output

    $cpuUsageFormatted = "{0:N2}%" -f $cpuUsage.CounterSamples[0].CookedValue

    $memoryUsageFormatted = "{0:N2} MB" -f $memoryUsage.CounterSamples[0].CookedValue

    $diskSpaceFormatted = "Used: {0:N2} MB, Free: {1:N2} MB, Total: {2:N2} MB" -f $usedSpace, $freeSpace, $totalSpace

    # Write to log file

    $logEntry = "Date and Time: $(Get-Date) - CPU Usage: $cpuUsageFormatted, Memory Available: $memoryUsageFormatted, Disk Space: $diskSpaceFormatted"

    Add-Content -Path $logFile -Value $logEntry

}

# Run the health check

Get-SystemHealth
      

Modificar o eliminar tareas programadas

Antes de modificar o eliminar una o más tareas programadas, es posible que desee revisar todas las tareas existentes. Para ver la lista de tareas, simplemente ejecute el cmdlet Get-ScheduledTask.

Modificando una tarea programada

Para modificar una tarea, haga clic derecho sobre ella y seleccione Properties, como se muestra a continuación. Luego edite los ajustes necesarios y haga clic en OK para guardar los cambios.

Image

Eliminando una tarea programada

Para eliminar una tarea programada, haga clic derecho sobre ella, seleccione Eliminar y confirme la acción.

Image

Creación de Tareas Programadas con Scripts de PowerShell

Introducción a la programación de PowerShell

Para crear tareas programadas, tienes otra opción además del Programador de tareas: PowerShell. Crear y gestionar tareas programadas directamente desde la interfaz de PowerShell puede mejorar significativamente la productividad, precisión y fiabilidad de la sesión, especialmente al administrar sistemas remotos a través de una CimSession.

A continuación se presentan algunos de los principales comandos de PowerShell utilizados para crear y gestionar tareas programadas:

  • New-ScheduledTask — Crea un nuevo objeto de tarea programada en PowerShell
  • Register-ScheduledTask — Registra una nueva tarea programada
  • New-ScheduledTaskAction — Define las acciones de las tareas programadas
  • New-ScheduledTaskPrincipal — Almacena la cuenta de usuario bajo la cual se ejecutará la tarea
  • New-ScheduledTaskSettingsSet — Define la configuración de las tareas programadas
  • New-ScheduledTaskTrigger — Define los desencadenadores de tareas programadas

Ventajas de usar PowerShell para la gestión de tareas programadas

Los beneficios de usar PowerShell para ejecutar tareas programadas incluyen lo siguiente:

  • Facilidad de uso — Es fácil especificar disparadores, condiciones y acciones complejas.
  • Flexibilidad — Puede escribir y ejecutar scripts sofisticados que pueden realizar una amplia gama de tareas, desde simples limpiezas de archivos hasta diagnósticos y reparaciones de sistemas complejos.
  • Ahorro de tiempo — Utilizar una tarea programada de PowerShell para ejecutar un script de PowerShell elimina la necesidad de realizar manualmente tareas repetitivas o complejas.
  • Resolución de problemas más fácil — Los scripts de PowerShell pueden registrar información detallada sobre los errores o incluso intentar solucionarlos automáticamente.
  • Ejecución remota — Las tareas programadas pueden ejecutarse y regularse en múltiples máquinas. Esto es particularmente beneficioso en entornos de red más grandes.
  • Seguridad — PowerShell incluye muchas características de seguridad, como la política de execution y scripts firmados, para ayudar a asegurar que solo los scripts autorizados se ejecuten en su sistema.
  • Eficiencia — Utilizar PowerShell para programar tareas generalmente consume menos recursos del sistema que las herramientas de automatización de terceros.
  • Adaptabilidad — Las tareas programadas en PowerShell pueden modificarse, replicarse o ampliarse fácilmente para satisfacer las necesidades cambiantes.

Creando una Tarea Programada con PowerShell

Un script de PowerShell para crear una tarea programada incluye los siguientes elementos:

  • $action — Esto especifica lo que hará la tarea, como ejecutar un script de PowerShell, iniciar una aplicación o ejecutar un comando:
      $action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\InstallOfSoftware.ps1"
      
  • $trigger — Esto especifica cuándo se ejecutará la tarea, como en un momento específico, diariamente o semanalmente, o basado en eventos del sistema:
      $trigger = New-ScheduledTaskTrigger -Daily -At "10:00AM"
      
  • $principal — Esto especifica la cuenta de usuario bajo la cual se ejecutará la tarea:

$principal = New-ScheduledTaskPrincipal -UserId “NT AUTHORITY\SYSTEM” -LogonType Password

  • $settings — Esto incluye opciones como cómo manejar fallos en las tareas, condiciones para ejecutar y comportamiento con batería:
      $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable
      
  • Register-ScheduledTask — Esto registra la tarea con el Programador de tareas:
      Register-ScheduledTask -TaskName “Installation of Software" -Action $action -Trigger $trigger -Principal $principal -Settings $settings
      

A continuación puede ver la ejecución del script completo:

Image

Consideraciones de seguridad y mejores prácticas

Implicaciones de seguridad de las tareas programadas

Cuando programe tareas, ya sea utilizando el Programador de tareas o PowerShell, asegúrese de prestar atención a las siguientes preocupaciones de seguridad:

  • Gestión de permisos — Las tareas programadas se ejecutan con los permisos de la cuenta bajo la cual están programadas, por lo que pueden ser objeto de abuso. Este riesgo es mayor si la cuenta tiene acceso elevado. Asegúrese de ejecutar tareas programadas utilizando cuentas que tengan los permisos mínimos necesarios.
  • Seguridad de scripts — Los scripts o ejecutables invocados por tareas programadas pueden ser vectores de vulnerabilidades de seguridad. Por ejemplo, actores maliciosos pueden reemplazar o modificar scripts almacenados en directorios sin protección para ejecutar comandos perjudiciales.
  • Secuestro de procesos — Si una tarea programada es predecible y se ejecuta con altos privilegios, un atacante podría reemplazar el script que la tarea debe ejecutar con código malicioso.
  • Auditoría y responsabilidad — Es esencial mantener registros detallados de la creación, modificación y ejecución de tareas programadas para detectar y responder a actividades maliciosas.
  • Denegación de servicio — Al programar tareas que consumen excesivos recursos del sistema para ejecutarse en momentos críticos, un atacante podría interrumpir la capacidad del sistema anfitrión para realizar sus funciones previstas.

Ejecución de scripts con el contexto de seguridad apropiado y las implicaciones de usar cuentas altamente privilegiadas

Para minimizar su superficie de ataque, siempre ejecute scripts bajo una cuenta que tenga el menor privilegio necesario para la tarea y evite ejecutar scripts con derechos administrativos. Para lograr esto, comprenda qué recursos, permisos y límites de regulación requiere un script. Por ejemplo, ¿necesita el script modificar archivos del sistema, acceder a datos específicos o comunicarse a través de la red?

Además, utilice políticas de ejecución para controlar las condiciones bajo las cuales se pueden ejecutar los scripts. Por ejemplo, puede restringir el sistema para ejecutar scripts solo si están firmados por un editor de confianza.

Para scripts que necesiten ejecutarse como un servicio, considere usar una cuenta de servicio administrado de Windows (MSA) o una cuenta de servicio administrado de grupo (gMSA), las cuales son más seguras porque sus contraseñas se gestionan automáticamente.

Mejores prácticas para crear tareas programadas

Para maximizar los beneficios del uso de tareas programadas, sigue estas mejores prácticas:

  • Asegúrese de que cada tarea tenga un propósito claro. Documente tanto lo que hace la tarea como por qué es necesaria para ayudar a otros que podrían trabajar con la tarea en el futuro.
  • Establezca convenciones de nomenclatura claras. Para evitar confusión y ejecución indebida de tareas, asegúrese de que cada tarea programada tenga una ruta de tarea única.
  • Revisar y probar. Revise cuidadosamente los scripts antes de ejecutarlos, especialmente si provienen de fuentes externas, prestando atención a cualquier código sospechoso. Antes de implementar una tarea programada en un entorno de producción, pruébela exhaustivamente en un entorno de ensayo o desarrollo. También es una buena práctica mantener un repositorio de scripts aprobados.
  • Implemente el manejo de errores. Asegúrese de que cada script pueda gestionar los errores comunes de manera eficaz y alertar a los miembros del equipo relevantes cuando haya un problema que requiera atención.
  • Comprender las dependencias. Si una tarea depende de servicios o datos externos, asegúrese de que haya verificaciones de disponibilidad y manejo adecuado de interrupciones o retrasos.
  • Considere el uso de recursos. Busque maneras de hacer que las tareas consuman menos recursos, como modificando su lógica o frecuencia de ejecución. Las tareas deben ejecutarse tan a menudo como sea necesario, pero no tan frecuentemente que generen problemas de rendimiento. Al elegir cuándo se ejecutan las tareas, considere factores como la actividad de otros sistemas y posibles conflictos.
  • Preste atención a la seguridad. Además de seguir las pautas de seguridad proporcionadas anteriormente, asegúrese de utilizar medidas de autenticación y autorización apropiadas para tareas que requieran acceso a recursos seguros y asegúrese de que las tareas no expongan datos sensibles inadvertidamente.
  • Evite depender de la configuración predeterminada para tareas críticas. Personalice las configuraciones de tareas para adaptarlas a sus necesidades específicas.
  • Almacene los scripts en una ubicación segura. Asegúrese de que solo los usuarios que necesiten ejecutar o modificar los scripts tengan acceso.
  • Firme sus scripts. Siempre que sea posible, firme sus scripts con un certificado digital emitido por una Autoridad Certificadora (CA) de confianza. Esto no solo verifica la autoría del script, sino que también asegura que el script no ha sido alterado desde que fue firmado.
  • Implemente el monitoreo y las alertas. Los registros son invaluables para diagnosticar problemas y comprender las acciones de una tarea. Herramientas que notifican a los administradores sobre actividades inusuales de scripts o degradación del rendimiento permiten una respuesta más rápida.
  • Revise y actualice regularmente las tareas programadas. Esto incluye actualizar cualquier dependencia, ajustar los horarios basados en las nuevas necesidades empresariales y retirar las tareas que ya no sean necesarias.

Conclusión

El Programador de tareas de Windows permite a los usuarios empresariales y administradores ejecutar scripts de PowerShell en fechas y horas específicas de manera regular, como diaria o semanalmente, o cuando se cumplen condiciones específicas. Automatizar tareas usando el Programador de tareas ahorra tiempo al mismo tiempo que asegura que las tareas se realicen de manera precisa y confiable. Los usuarios más avanzados pueden utilizar PowerShell para crear y gestionar tareas programadas.

Al programar scripts, asegúrese de seguir las mejores prácticas como documentar el propósito de la tarea, utilizar el manejo de errores y el registro dentro de los scripts, y utilizar el least privilege principle para evitar permisos excesivos, lo cual puede ser una amenaza de seguridad si se ve comprometido y utilizado por adversarios.

FAQ

¿Qué es el Programador de tareas de Windows?

El Programador de tareas de Windows es una herramienta integrada en el sistema operativo Windows que permite a los usuarios programar tareas y procesos para que se ejecuten automáticamente. Con el Programador de tareas, puedes configurar tareas para que se ejecuten en un día y hora específicos o en un cierto intervalo, como diariamente o semanalmente.

¿Por qué debería usar Task Scheduler para automatizar scripts de PowerShell?

Al optar por ejecutar scripts de PowerShell desde el Programador de tareas, puede automatizar tareas repetitivas, lo que garantiza que se realicen de manera confiable y precisa sin más esfuerzo de su parte.

¿Cómo abro el Programador de tareas?

Presione Win + R para abrir el cuadro de diálogo Ejecutar. Escriba taskschd.msc y presione Enter.

¿Cómo creo una nueva tarea en el Programador de tareas?

Haga clic en Create Task en el panel de Acciones en el lado derecho de la ventana del Programador de tareas. Proporcione un nombre y descripción para la tarea; elija las configuraciones apropiadas para las pestañas de Acción, Disparadores, Condiciones y Configuración; y haga clic en Guardar.

¿Cuáles son los beneficios de nombrar y describir una tarea?

Proporcionar un nombre útil y una descripción clara que explique qué hace la tarea y por qué es necesaria ayuda a garantizar que cada tarea tenga un propósito claro y facilita el mantenimiento futuro por parte de otras personas que trabajen con la tarea.

¿Cómo determino el desencadenante de una tarea programada?

En la pestaña Trigger de una tarea, puede especificar cuándo debe ejecutarse la tarea, como en un horario, al inicio del sistema o al iniciar sesión el usuario, así como el intervalo de repetición y otros criterios.

¿Cómo configuro el Programador de tareas para ejecutar un script de PowerShell?

  1. Vaya a la pestaña Actions, haga clic en New y seleccione Start a program del menú desplegable.
  2. In the Program/script field, input powershell.exe.
  3. En el campo Add arguments, ingrese lo siguiente, reemplazando el argumento InstallofSoftware.ps1 con el nombre de su script:
      -File C:\Scripts\InstallofSoftware.ps1
      

¿Cómo puedo configurar tareas para que se ejecuten incluso cuando el usuario no ha iniciado sesión?

En la pestaña General de la tarea, seleccione la opción Run whether a user is logged on or not.

¿Cómo gestiono los privilegios de tareas y aseguro que los scripts se detengan después de una duración especificada?

Las tareas tienen los privilegios de la cuenta bajo la cual se ejecutan. Puede especificar la cuenta para ejecutar la tarea en la pestaña General.

Para asegurar que un script se detenga después de un tiempo determinado, en la pestaña Configuración, seleccione Detener la tarea si se ejecuta durante más tiempo que y elija el número deseado de horas o días.

¿Cómo controlo la visibilidad de la ejecución de scripts?

Puede controlar la ejecución y visibilidad de scripts agregando el parámetro -NoExit o -Command en el campo Add Argument de la pestaña Acción.

¿Qué consejos pueden ayudar a solucionar tareas que no se ejecutan como se espera?

La expiración o cambio de contraseñas puede provocar que una tarea falle. Las tareas programadas configuradas incorrectamente o diseñadas maliciosamente (por ejemplo, tareas que consumen recursos excesivos del sistema) pueden llevar a una denegación de servicio en la máquina anfitriona, perjudicando su disponibilidad y rendimiento.

¿Cómo modifico una tarea programada existente?

Haga clic derecho en la tarea dentro de la biblioteca del Programador de tareas de Windows, seleccione Propiedades y realice los cambios deseados en la configuración de la tarea.

¿Cómo elimino una tarea programada?

Haga clic derecho en la tarea dentro de la biblioteca del Programador de tareas y elija Delete.

¿Cuáles son las ventajas de usar PowerShell para programar tareas?

En comparación con la interfaz gráfica de usuario del Programador de tareas, PowerShell ofrece un control más detallado sobre la configuración de tareas, el manejo de errores y el registro, y facilita la definición de lógica de programación personalizada. PowerShell también te permite programar y ejecutar tareas en múltiples sistemas remotos desde una ubicación central.

¿Para qué se utilizan los cmdlets New-ScheduledTaskTrigger y Register-ScheduledTask?

El cmdlet New-ScheduledTaskTrigger se utiliza para definir los desencadenadores de la tarea, y el cmdlet Register-ScheduledTask se utiliza para registrar la tarea en el Programador de tareas de Windows.

¿Cuáles son las implicaciones de seguridad de las tareas programadas?

Ejecutar una tarea programada con cuentas altamente privilegiadas aumenta los riesgos de seguridad si la cuenta se ve comprometida, así que siempre elige la cuenta con el principio de mínimo privilegio en mente.

¿Cómo debo ejecutar scripts con el contexto de seguridad apropiado?

Lo más importante, ejecute scripts bajo una cuenta con los menores privilegios necesarios para completar la tarea y utilice cuentas de servicio administradas (MSAs) o cuentas de servicio administradas en grupo (gMSAs) cuando sea apropiado. Considere usar políticas de ejecución para permitir restringir solo los scripts que estén firmados por un editor de confianza y, siempre que sea posible, firme sus scripts con un certificado digital emitido por una Autoridad de Certificación de confianza.

¿Cuáles son las mejores prácticas para organizar y gestionar las tareas programadas?

Las mejores prácticas clave incluyen almacenar los scripts en un lugar seguro con permisos de acceso controlados y evaluar los scripts en un entorno de prueba antes de implementarlos en producción.

FAQ

Compartir en

Aprende más

Acerca del autor

Asset Not Found

Tyler Reese

VP de Gestión de Producto, CISSP

Con más de dos décadas en la industria de la seguridad de software, Tyler Reese conoce íntimamente los desafíos de identidad y seguridad que evolucionan rápidamente a los que se enfrentan las empresas hoy en día. Actualmente, se desempeña como director de producto para el portafolio de Netwrix Identity and Access Management, donde sus responsabilidades incluyen evaluar tendencias del mercado, establecer la dirección de la línea de productos IAM y, finalmente, satisfacer las necesidades de los usuarios finales. Su experiencia profesional abarca desde la consultoría de IAM para empresas Fortune 500 hasta trabajar como arquitecto empresarial de una gran compañía de venta directa al consumidor. Actualmente posee la certificación CISSP.