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"
$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.

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 :

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

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.

¿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

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"
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.





