La mayoría de los usuarios y administradores utilizan taskschd.msc Consola de interfaz gráfica para crear y administrar tareas programadas en Windows. Sin embargo, en varios scripts y flujos automatizados, es mucho más conveniente utilizar las funciones de PowerShell para crear tareas programadas. En este artículo, mostraremos cómo crear y administrar tareas del Programador de Windows usando PowerShell.

Administrar tareas programadas en Windows a través de PowerShell

La Tareas programadas El módulo de PowerShell se usa para administrar tareas programadas en Windows 10 / Windows Server 2016. Puede enumerar los cmdlets en un módulo de la siguiente manera:

Get-Command -Module ScheduledTasks

  • Disable-ScheduledTask
  • Enable-ScheduledTask
  • Exportación programada
  • Get-ClusteredScheduledTask
  • Get-ScheduledTask
  • Get-ScheduledTaskInfo
  • Nueva tarea programada
  • New-ScheduledTaskAction
  • New-ScheduledTaskPrincipal
  • New-ScheduledTaskSettingsSet
  • Activador de tareas programado nuevo
  • Register-ClusteredScheduledTask
  • Registrar-Tarea programada
  • Set-ClusteredScheduledTask
  • Tarea programada
  • Start-ScheduledTask
  • Stop-ScheduledTask
  • Unregister-ClusteredScheduledTask
  • Anular el registro de tarea programada

Insinuación. Anteriormente, la herramienta de consola incorporada schtasks.exe se utilizó en Windows para crear y administrar trabajos del programador.

Creación de tareas programadas con Windows PowerShell

En las versiones modernas de PowerShell (comenzando con PowerShell 3.0 en Windows Server 2012 / Windows 8), puede usar el Activador de tareas programado nuevo y Registrar-Tarea programada cmdlets para crear tareas programadas.

Supongamos que necesitamos crear una tarea programada que debería ejecutarse durante el inicio (o en un momento específico) y ejecutar algún script o comando de PowerShell. Creemos una tarea programada llamada StartupScript1. Esta tarea debe ejecutar el archivo de secuencia de comandos de PowerShell C: PS StartupScript.ps1 a las 10:00 a.m. todos los días. La tarea se ejecutará con privilegios elevados (casilla de verificación "Ejecutar con los privilegios más altos") en la cuenta del SISTEMA.

$Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
$User= "NT AUTHORITYSYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:PSStartupScript1.ps1"
Register-ScheduledTask -TaskName "StartupScript1" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

Si la tarea se creó correctamente, aparece el estado "Listo".

Su secuencia de comandos de PowerShell se ejecutará en el horario especificado. Si tiene una política de ejecución de PowerShell habilitada en su computadora que evita que se ejecuten los scripts de PS1, puede ejecutar un script de PowerShell desde una tarea programada con el –Bypass parámetro.

Utilice este código al crear una nueva tarea:

$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument “-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:PSStartupScript.ps1"

Consejo. Si desea que la tarea se ejecute siempre durante el inicio de la computadora, el primer comando debe ser el siguiente:
$Trigger= New-ScheduledTaskTrigger -AtStartup

Si desea ejecutar una tarea cuando un usuario inicia sesión:
$Trigger= New-ScheduledTaskTrigger -AtLogon

Abre el taskschd.msc consola y asegúrese de tener una nueva tarea del programador en la biblioteca del programador de tareas.

Aparece una nueva tarea en la consola del programador de tareas.

En Powershell 2.0 (Windows 7, Windows Server 2008 R2), para crear una tarea programada desde PowerShell puede usar el Horarios de servicio Interfaz COM (o actualice la versión de PowerShell). En este ejemplo, creamos una tarea programada que ejecutará el archivo específico que contiene el script de PowerShell durante el inicio. La tarea se realiza con el NT AUTHORITYSYSTEM privilegios.

$TaskName = "NewPsTask"
$TaskDescription = "Running PowerShell script from Task Scheduler"
$TaskCommand = "c:windowssystem32WindowsPowerShellv1.0powershell.exe"
$TaskScript = "C:PSStartupScript.ps1"
$TaskArg = "-WindowStyle Hidden -NonInteractive -Executionpolicy unrestricted -file $TaskScript"
$TaskStartTime = [datetime]::Now.AddMinutes(1)
$service = new-object -ComObject("Schedule.Service")
$service.Connect()
$rootFolder = $service.GetFolder("")
$TaskDefinition = $service.NewTask(0)
$TaskDefinition.RegistrationInfo.Description = "$TaskDescription"
$TaskDefinition.Settings.Enabled = $true
$TaskDefinition.Settings.AllowDemandStart = $true
$triggers = $TaskDefinition.Triggers
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa383915(v=vs.85).aspx
$trigger = $triggers.Create(8)

¿Cómo ver y ejecutar tareas programadas con PowerShell?

Puede enumerar todas las tareas programadas activas en Windows con el comando:

Get-ScheduledTask -TaskPath | ? state -ne Disabled

Para obtener información sobre una tarea específica:

Get-ScheduledTask CheckServiceState| Get-ScheduledTaskInfo

LastRunTime : 4/7/2021 10:00:00 AM
LastTaskResult : 267011
NextRunTime : 4/8/2021 10:00:00 AM
NumberOfMissedRuns : 0
TaskName : CheckServiceState
TaskPath : 
PSComputerName :

PowerShell de Get-ScheduledTaskInfo

Puede deshabilitar esta tarea:

Get-ScheduledTask CheckServiceState | Disable-ScheduledTask

Para habilitar una tarea:

Get-ScheduledTask CheckServiceState | Enable-ScheduledTask

Para ejecutar la tarea inmediatamente (sin esperar la programación), ejecute:

Start-ScheduledTask CheckServiceState

deshabilitar / habilitar / iniciar la tarea programada manualmente

Para eliminar completamente una tarea de la biblioteca del Programador de tareas:

Unregister-ScheduledTask -TaskName CheckServiceState

Si necesita cambiar el nombre de usuario desde el que se inicia la tarea y, por ejemplo, el modo de compatibilidad, utilice el Tarea programada cmdlet:

$task_user = New-ScheduledTaskPrincipal -UserId woshubj.abrams' -RunLevel Highest
$task_settings = New-ScheduledTaskSettingsSet -Compatibility 'Win8'
Set-ScheduledTask -TaskName CheckServiceState_PS -Principal $task_user -Settings $task_settings

Si recibe el error "Set-ScheduledTask: No mapping between account names and security IDs was done”Compruebe que proporcione el nombre de usuario correcto.

Set-ScheduledTask: No se realizó ninguna asignación entre los nombres de las cuentas y los ID de seguridad.

¿Cómo exportar e importar tareas programadas a través de archivos XML?

PowerShell le permite exportar la configuración actual de cualquier tarea programada a un archivo XML de texto. De modo que puede exportar los parámetros de cualquier tarea e implementar una tarea en otras computadoras. La tarea se puede exportar tanto desde la GUI del Programador de tareas como desde la consola de PowerShell.

Aquí está el comando para exportar la tarea con el nombre StartupScript al archivo StartupScript.xml:

Export-ScheduledTask StartupScript | out-file c:tmpStartupScript.xml

Export-ScheduledTask - tarea xml

El cmdlet Export-ScheduledTask no está disponible en PowerShell 2.0, por lo que en Windows 7 / Windows Server 2008 R2 es mejor usar la herramienta incorporada schtasks para exportar la configuración de la tarea y redirigir el resultado a un archivo de texto:

schtasks /query /tn "NewPsTask" /xml >> "c:tmpNewPsTask.xml"

Una vez que la configuración de la tarea programada se exporta al archivo XML, se puede importar a cualquier computadora de la red utilizando la GUI, SchTasks.exe o PowerShell.

Registrar-Tarea programada cmdlet puede ayudarlo a importar configuraciones de tareas desde un archivo XML y registrarlo:
Register-ScheduledTask -Xml (Get-Content “\mun-fs01publicNewPsTask.xml” | out-string) -TaskName "NewPsTask"

En PowerShell 2.0 (Windows 7 / Server 2008 R2), es más fácil importar una tarea con la herramienta schtasks. El primer comando crea una nueva tarea. El segundo lo ejecutará inmediatamente (sin esperar a que el disparador lo active).

schtasks /create /tn "NewPsTask" /xml "\Srv1publicNewPsTask.xml" /ru corpskrutapal /rp Pa$$w0rd
schtasks /Run /TN "NewPsTask"

Tenga en cuenta que este ejemplo utiliza las credenciales de la cuenta que se utiliza para ejecutar la tarea. Si no se especifican las credenciales, porque no están almacenadas en el trabajo, se solicitarán al realizar la importación.

Recomendado para ti