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-Joby 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 cmdleto 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 , Registeren 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.

Consulte también