La mayoría de los usuarios y administradores utilizan el 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 usar las funciones de PowerShell para crear tareas programadas. En este artículo, le mostraremos cómo crear y administrar tareas del Programador de Windows usando PowerShell.
Administrar tareas programadas en Windows a través de PowerShell
los Tareas programadas El módulo 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
- Deshabilitar tarea programada
- Habilitar tarea programada
- Tarea programada de exportación
- Get-ClusteredScheduledTask
- Get-ScheduledTask
- Get-ScheduledTaskInfo
- Nueva tarea programada
- New-ScheduledTaskAction
- Nuevo principal de tareas programadas
- Nuevo conjunto de configuración de tareas programadas
- Nuevo desencadenador de tareas programadas
- Register-ClusteredScheduledTask
- Tarea programada de registro
- Conjunto-ClusteredScheduledTask
- Establecer tarea programada
- Tarea programada de inicio
- Stop-ScheduledTask
- Unregister-ClusteredScheduledTask
- Unregister-ScheduledTask
Insinuación. Anteriormente, la herramienta de consola integrada schtasks.exe
se usó en Windows para crear y administrar trabajos del programador.
Creación de tareas programadas con Windows PowerShell
En las versiones modernas de PowerShell (a partir de PowerShell 3.0 en Windows Server 2012/Windows 8), puede usar el Nuevo desencadenador de tareas programadas y Tarea programada de registro 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. Vamos a crear una tarea programada llamada StartupScript1. Esta tarea debe ejecutar el archivo de script de PowerShell C:PSStartupScript.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ó con éxito, aparece el estado «Listo».
Su secuencia de comandos de PowerShell se ejecutará según la programación especificada. 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 cada vez que se inicia 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.
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 actualizar 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 :
Puede deshabilitar esta tarea:
Get-ScheduledTask CheckServiceState | Disable-ScheduledTask
Para habilitar una tarea:
Get-ScheduledTask CheckServiceState | Enable-ScheduledTask
Para ejecutar la tarea de inmediato (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 Establecer 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 proporciona 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
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 integrada. tareas 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 mediante la GUI, SchTasks.exe o PowerShell.
Tarea programada de registro 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 gatillo lo active).
schtasks /create /tn "NewPsTask" /xml "\Srv1publicNewPsTask.xml" /ru corpskrutapal /rp Pa$$w0rd
schtasks /Run /TN "NewPsTask"
Tenga en cuenta que este ejemplo usa las credenciales de la cuenta que se usa para ejecutar la tarea. Si no se especifican las credenciales, porque no están almacenadas en el trabajo, se solicitarán al importar.
Artículos Interesantes
Contenido