about_Scheduled_Jobs
Descripción breve
Describe los trabajos programados y explica cómo usar y administrar trabajos programados en PowerShell y en el Programador de tareas.
Descripción larga
Los trabajos programados de PowerShell son un híbrido útil de trabajos en segundo plano de PowerShell y tareas del programador de tareas.
Al igual que los trabajos en segundo plano de PowerShell, los trabajos programados se ejecutan de forma asincrónica en segundo plano. Las instancias de trabajos programados que se han ejecutado se pueden administrar mediante los cmdlets de trabajo, como Start-Job
, Get-Job
, Stop-Job
y Receive-Job
.
Al igual que las tareas del Programador de tareas, los trabajos programados se guardan en el disco. Puede ver y administrar los trabajos en el Programador de tareas, habilitarlos y deshabilitarlos según sea necesario, ejecutarlos o usarlos como plantillas, establecer una programación única o periódica para iniciar los trabajos o establecer condiciones en las que se inician los trabajos.
Además, los resultados de las instancias de trabajo programadas se guardan en el disco en un formato fácilmente accesible, lo que proporciona un registro en ejecución de la salida del trabajo. Los trabajos programados incluyen un conjunto personalizado de cmdlets para administrarlos. Los cmdlets permiten crear, editar, administrar, deshabilitar y volver a habilitar trabajos programados, desencadenadores de trabajos y opciones de trabajo.
Este conjunto completo y flexible de herramientas hacen que los trabajos programados sean un componente esencial de muchas soluciones profesionales de TI de PowerShell.
Los cmdlets de trabajo programados se incluyen en el módulo PSScheduledJob que se instala con PowerShell. Este módulo se introdujo en PowerShell 3.0 y funciona en PowerShell 3.0 y versiones posteriores de PowerShell. Para obtener más información sobre los cmdlets incluidos en el módulo PSScheduledJob , consulte PSScheduledJob.
Para obtener más información sobre los trabajos en segundo plano de PowerShell, consulte about_Jobs.
Para obtener más información sobre el Programador de tareas, vea Programador de tareas.
Nota:
Puede ver y administrar trabajos programados de PowerShell en el Programador de tareas. Los trabajos de PowerShell y los cmdlets de trabajo programados solo funcionan en trabajos programados creados en PowerShell.
Inicio rápido
En este ejemplo se crea un trabajo programado que se inicia todos los días a las 3:00 a. m. y ejecuta el Get-Process
cmdlet . El trabajo se inicia incluso si el equipo se está ejecutando en baterías.
$trigger = New-JobTrigger -Daily -At 3AM
$options = New-ScheduledJobOption -StartIfOnBattery
Register-ScheduledJob -Name ProcessJob -ScriptBlock {Get-Process} `
-Trigger $trigger -ScheduledJobOption $options
El Get-ScheduledJob
cmdlet obtiene los trabajos programados en el equipo local.
Get-ScheduledJob
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
7 ProcessJob {1} Get-Process True
Get-JobTrigger
obtiene los desencadenadores de trabajo de ProcessJob. Los parámetros de entrada especifican el trabajo programado, no el desencadenador, porque los desencadenadores se guardan en un trabajo programado.
Get-JobTrigger -Name ProcessJob
Id Frequency Time DaysOfWeek Enabled
-- --------- ---- ---------- -------
1 Daily 11/5/2011 3:00:00 AM True
En este ejemplo se usa el parámetro ContinueIfGoingOnBattery del Set-ScheduledJob
cmdlet para cambiar la propiedad StopIfGoingOnBatteries de ProcessJob a False.
Get-ScheduledJob -Name ProcessJob | Set-ScheduledJobOption `
-ContinueIfGoingOnBattery -PassThru
StartIfOnBatteries : True
StopIfGoingOnBatteries : False
WakeToRun : True
StartIfNotIdle : True
StopIfGoingOffIdle : False
RestartOnIdleResume : False
IdleDuration : 00:10:00
IdleTimeout : 01:00:00
ShowInTaskScheduler : True
RunElevated : False
RunWithoutNetwork : True
DoNotAllowDemandStart : False
MultipleInstancePolicy : IgnoreNew
JobDefinition : Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition
El Get-ScheduledJob
cmdlet obtiene el trabajo programado processJob .
Get-ScheduledJob ProcessJob
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
7 ProcessJob {1} Get-Process True
El Get-Job
cmdlet obtiene todas las instancias del trabajo programado ProcessJob que se han ejecutado hasta ahora. El Get-Job
cmdlet obtiene trabajos programados solo cuando el módulo PSScheduledJob se importa en la sesión actual.
Sugerencia
Tenga en cuenta que usa los cmdlets de trabajo programados para administrar trabajos programados, pero usa los cmdlets de trabajo para administrar instancias de trabajos programados.
Get-Job -Name ProcessJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------ ----- ----------- -------- -------
45 ProcessJob PSScheduledJob Completed True localhost Get-Process
46 ProcessJob PSScheduledJob Completed True localhost Get-Process
47 ProcessJob PSScheduledJob Completed True localhost Get-Process
48 ProcessJob PSScheduledJob Completed True localhost Get-Process
49 ProcessJob PSScheduledJob Completed True localhost Get-Process
50 ProcessJob PSScheduledJob Completed True localhost Get-Process
51 ProcessJob PSScheduledJob Completed True localhost Get-Process
El Receive-Job
cmdlet obtiene los resultados de la instancia más reciente del trabajo programado ProcessJob (ID = 51).
Receive-Job -ID 51
Aunque el Receive-Job
comando no incluye el parámetro Keep , los resultados del trabajo se guardan en el disco hasta que se eliminan o se supera el número máximo de resultados.
Los resultados del trabajo ya no están disponibles en esta sesión, pero si inicia una nueva sesión o abre una nueva ventana de PowerShell, los resultados del trabajo vuelven a estar disponibles.
El siguiente comando usa el parámetro DefinitionName del Start-Job
cmdlet para iniciar el trabajo programado processJob .
Los trabajos que se inician mediante el Start-Job
cmdlet son trabajos en segundo plano estándar de PowerShell, no instancias del trabajo programado. Al igual que todos los trabajos en segundo plano, estos trabajos se inician inmediatamente, no están sujetos a opciones de trabajo ni se ven afectados por desencadenadores de trabajo, y su salida no se guarda en el directorio de salida del directorio de trabajo programado.
Start-Job -DefinitionName ProcessJob
El Unregister-ScheduledJob
cmdlet elimina el trabajo programado ProcessJob y todos los resultados guardados de sus instancias de trabajo.
Unregister-ScheduledJob ProcessJob
Conceptos de trabajos programados
Un trabajo programado ejecuta comandos o un script. Un trabajo programado puede incluir desencadenadores de trabajo que inician las opciones de trabajo y trabajo que establecen condiciones para ejecutar el trabajo.
Un desencadenador de trabajo inicia automáticamente un trabajo programado. Un desencadenador de trabajo puede incluir una programación única o periódica o especificar un evento, como cuando un usuario inicia sesión o Windows. Un trabajo programado puede tener uno o varios desencadenadores de trabajo y puede crear, agregar, habilitar, deshabilitar y obtener desencadenadores de trabajo.
Los desencadenadores de trabajo son opcionales. Puede iniciar los trabajos programados inmediatamente mediante Start-Job cmdlet
o agregando el parámetro RunNow al Register-ScheduledJob
comando.
Las opciones de trabajo establecen las condiciones para ejecutar un trabajo programado. Cada trabajo programado tiene un objeto de opciones de trabajo. Puede crear y editar objetos de opciones de trabajo y agregarlos a uno o varios trabajos programados.
Cada vez que se inicia un trabajo programado, se crea una instancia de trabajo. Use los cmdlets de trabajo de PowerShell para ver y administrar la instancia de trabajo.
Los trabajos programados se guardan en el disco y usan el verbo del cmdlet , Register
en lugar de New
. Los archivos XML se encuentran en el equipo local del directorio $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
.
PowerShell crea un directorio para cada trabajo programado y guarda los comandos de trabajo, desencadenadores de trabajo, opciones de trabajo y resultados de trabajo en el directorio de trabajo programado. Los desencadenadores de trabajo y las opciones de trabajo no se guardan en el disco de forma independiente. Se guardan en el XML del trabajo programado de cada trabajo programado con el que están asociados.
Los trabajos programados, los desencadenadores de trabajos y las opciones de trabajo aparecen en PowerShell como objetos. Los objetos están vinculados entre sí, lo que facilita la detección y el uso en comandos y scripts.
Los trabajos programados aparecen como objetos ScheduledJobDefinition . El objeto ScheduledJobDefinition tiene una propiedad JobTriggers que contiene los desencadenadores de trabajo del trabajo programado y una propiedad Options que contiene las opciones de trabajo. Los objetos ScheduledJobTriggers y ScheduledJobOptions que representan desencadenadores de trabajo y opciones de trabajo, respectivamente, tienen una propiedad JobDefinition que contiene el trabajo programado con el que están asociados. Esta interconexión recursiva facilita la búsqueda de los desencadenadores y las opciones de un trabajo programado y para buscar, generar scripts y mostrar el trabajo programado al que está asociado cualquier desencadenador de trabajo o opción de trabajo.