Acerca de los trabajos programadosAbout Scheduled Jobs

Descripción breveShort description

Describe los trabajos programados y explica cómo usar y administrar los trabajos programados en PowerShell y en Programador de tareas.Describes scheduled jobs and explains how to use and manage scheduled jobs in PowerShell and in Task Scheduler.

Descripción largaLong description

Los trabajos programados de PowerShell son un híbrido útil de trabajos en segundo plano de PowerShell y tareas de Programador de tareas.PowerShell scheduled jobs are a useful hybrid of PowerShell background jobs and Task Scheduler tasks.

Como los trabajos en segundo plano de PowerShell, los trabajos programados se ejecutan de forma asincrónica en segundo plano.Like PowerShell background jobs, scheduled jobs run asynchronously in the background. Las instancias de trabajos programados que se han ejecutado se pueden administrar mediante cmdlets de trabajo, como Start-Job ,, Get-Job Stop-Job y Receive-Job .Instances of scheduled jobs that have run can be managed by using the job cmdlets, such as Start-Job, Get-Job, Stop-Job, and Receive-Job.

Al igual que las tareas Programador de tareas, los trabajos programados se guardan en el disco.Like Task Scheduler tasks, scheduled jobs are saved to disk. Puede ver y administrar los trabajos en Programador de tareas, habilitarlos y deshabilitarlos según sea necesario, ejecutarlos o utilizarlos como plantillas, establecer una programación única o periódica para iniciar los trabajos o establecer las condiciones en las que se inician los trabajos.You can view and manage the jobs in Task Scheduler, enable and disable them as needed, run them or use them as templates, establish a one-time or recurring schedules for starting the jobs, or set conditions under which the jobs start.

Además, los resultados de las instancias de trabajo programadas se guardan en el disco en un formato de fácil acceso, lo que proporciona un registro en ejecución de la salida del trabajo.In addition, the results of scheduled job instances are saved to disk in an easily accessible format, providing a running log of job output. Los trabajos programados cuentan con un conjunto personalizado de cmdlets para administrarlos.Scheduled jobs come with a customized set of cmdlets for managing them. Los cmdlets permiten crear, editar, administrar, deshabilitar y volver a habilitar trabajos programados, desencadenadores de trabajo y opciones de trabajo.The cmdlets let you create, edit, manage, disable, and re-enable scheduled jobs, job triggers and job options.

Este conjunto completo y flexible de herramientas hacen que los trabajos programados sean un componente esencial de muchas soluciones profesionales de TI de PowerShell.This comprehensive and flexible set of tools make scheduled jobs an essential component of many professional PowerShell IT solutions.

Los cmdlets de trabajos programados se incluyen en el módulo PSScheduledJob que se instala con PowerShell.The scheduled job cmdlets are included in the PSScheduledJob module that is installed with PowerShell. Este módulo se presentó en PowerShell 3,0 y funciona en PowerShell 3,0 y versiones posteriores de PowerShell.This module was introduced in PowerShell 3.0 and works in PowerShell 3.0 and later versions of PowerShell. Para obtener más información acerca de los cmdlets incluidos en el módulo PSScheduledJob , consulte PSScheduledJob.For more information about the cmdlets contained in the PSScheduledJob module, see PSScheduledJob.

Para obtener más información sobre los trabajos en segundo plano de PowerShell, consulte about_Jobs.For more information about PowerShell background jobs, see about_Jobs.

Para obtener más información acerca de Programador de tareas, vea programador de tareas.For more information about Task Scheduler, see Task Scheduler.

Nota

Puede ver y administrar los trabajos programados de PowerShell en Programador de tareas.You can view and manage PowerShell scheduled jobs in Task Scheduler. Los trabajos de PowerShell y los cmdlets de trabajos programados solo funcionan en los trabajos programados que se crean en PowerShell.The PowerShell jobs and scheduled job cmdlets work only on scheduled jobs that are created in PowerShell.

Inicio rápidoQuick start

En este ejemplo se crea un trabajo programado que se inicia cada día a las 3:00 AM y se ejecuta el Get-Process cmdlet.This example creates a scheduled job that starts every day at 3:00 AM and runs the Get-Process cmdlet. El trabajo se inicia incluso si el equipo se está ejecutando con baterías.The job starts even if the computer is running on batteries.

$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.The Get-ScheduledJob cmdlet gets the scheduled jobs on the local computer.

Get-ScheduledJob
Id         Name            Triggers        Command            Enabled
--         ----            --------        -------            -------
7          ProcessJob      {1}             Get-Process        True

Get-JobTrigger Obtiene los desencadenadores de trabajo de ProcessJob .Get-JobTrigger gets the job triggers of ProcessJob . Los parámetros de entrada especifican el trabajo programado, no el desencadenador, porque los desencadenadores se guardan en un trabajo programado.The input parameters specify the scheduled job, not the trigger, because triggers are saved in a scheduled job.

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 .This example uses the ContinueIfGoingOnBattery parameter of the Set-ScheduledJob cmdlet to change the StopIfGoingOnBatteries property of ProcessJob to 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 .The Get-ScheduledJob cmdlet gets the ProcessJob scheduled job.

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.The Get-Job cmdlet gets all instances of the ProcessJob scheduled job that have run thus far. El Get-Job cmdlet obtiene los trabajos programados solo cuando el módulo PSScheduledJob se importa en la sesión actual.The Get-Job cmdlet gets scheduled jobs only when the PSScheduledJob module is imported into the current session.

Sugerencia

Tenga en cuenta que usa los cmdlets de trabajos programados para administrar los trabajos programados, pero puede usar los cmdlets de trabajo para administrar instancias de trabajos programados.Notice that you use the scheduled job cmdlets to manage scheduled jobs, but you use the job cmdlets to manage instances of scheduled jobs.

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).The Receive-Job cmdlet gets the results of the most recent instance of the ProcessJob scheduled job (ID = 51).

Receive-Job -ID 51

Aunque el Receive-Job comando no incluía 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.Even though the Receive-Job command did not include the Keep parameter, the results of the job are saved on disk until you delete them or the maximum number of results are exceeded.

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 volverán a estar disponibles.The job results are no longer available in this session, but if you start a new session or open a new PowerShell window, the results of the job are available again.

El siguiente comando usa el parámetro DefinitionName del Start-Job cmdlet para iniciar el trabajo programado ProcessJob .The following command uses the DefinitionName parameter of the Start-Job cmdlet to start the ProcessJob scheduled job.

Los trabajos que se inician mediante el Start-Job cmdlet son trabajos en segundo plano estándar de PowerShell, no instancias del trabajo programado.Jobs that are started by using the Start-Job cmdlet are standard PowerShell background jobs, not instances of the scheduled job. Al igual que todos los trabajos en segundo plano, estos trabajos se inician inmediatamente, no están sujetos a las opciones de trabajo o se ven afectados por los desencadenadores de trabajo, y su salida no se guarda en el directorio de salida del directorio de trabajos programados.Like all background jobs, these jobs start immediately, they aren't subject to job options or affected by job triggers, and their output is not saved in the output directory of the scheduled job directory.

Start-Job -DefinitionName ProcessJob

El Unregister-ScheduledJob cmdlet elimina el trabajo programado ProcessJob y todos los resultados guardados de sus instancias de trabajo.The Unregister-ScheduledJob cmdlet deletes the ProcessJob scheduled job and all saved results of its job instances.

Unregister-ScheduledJob ProcessJob

Conceptos de trabajos programadosScheduled jobs concepts

Un trabajo programado ejecuta comandos o un script.A scheduled job runs commands or a script. Un trabajo programado puede incluir desencadenadores de trabajo que inician las opciones de trabajo y trabajo que establecen las condiciones para ejecutar el trabajo.A scheduled job can include job triggers that start the job and job options that set conditions for running the job.

Un desencadenador de trabajo inicia automáticamente un trabajo programado.A job trigger starts a scheduled job automatically. Un desencadenador de trabajo puede incluir una programación única o periódica, o bien especificar un evento, como cuando un usuario inicia sesión o se inicia Windows.A job trigger can include a one-time or recurring schedule or specify an event, such as when a user logs on or Windows starts. Un trabajo programado puede tener uno o más desencadenadores de trabajo, y puede crear, agregar, habilitar, deshabilitar y obtener desencadenadores de trabajo.A scheduled job can have one or more job triggers, and you can create, add, enable, disable, and get job triggers.

Los desencadenadores de trabajo son opcionales.Job triggers are optional. Puede iniciar trabajos programados inmediatamente mediante el Start-Job cmdlet o agregando el parámetro RunNow al Register-ScheduledJob comando.You can start scheduled jobs immediately by using the Start-Job cmdlet, or by adding the RunNow parameter to your Register-ScheduledJob command.

Las opciones de trabajo establecen las condiciones para ejecutar un trabajo programado.Job options set the conditions for running a scheduled job. Cada trabajo programado tiene un objeto de opciones de trabajo.Every scheduled job has one job options object. Puede crear y editar objetos de opciones de trabajo y agregarlos a uno o varios trabajos programados.You can create and edit job options objects and add them to one or more scheduled jobs.

Cada vez que se inicia un trabajo programado, se crea una instancia de trabajo.Each time a scheduled job starts, a job instance is created. Use los cmdlets de trabajo de PowerShell para ver y administrar la instancia de trabajo.Use the PowerShell job cmdlets to view and manage the job instance.

Los trabajos programados se guardan en el disco y usan el verbo del cmdlet, Register , en lugar de New .Scheduled jobs are saved to disk and use the cmdlet verb, Register, instead of New. Los archivos XML se encuentran en el equipo local en el directorio $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs .The XML files are located on the local computer in the directory $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs.

PowerShell crea un directorio para cada trabajo programado y guarda los comandos de trabajo, los desencadenadores de trabajo, las opciones de trabajo y los resultados del trabajo en el directorio de trabajos programados.PowerShell creates a directory for each scheduled job and saves the job commands, job triggers, job options and job results in the scheduled job directory. Los desencadenadores de trabajo y las opciones de trabajo no se guardan en el disco de forma independiente.Job triggers and job options aren't saved to disk independently. Se guardan en el XML de trabajo programado de cada trabajo programado al que están asociados.They are saved in the scheduled job XML of each scheduled job with which they are associated.

Los trabajos programados, los desencadenadores de trabajo y las opciones de trabajo aparecen en PowerShell como objetos.Scheduled jobs, job triggers, and job options appear in PowerShell as objects. Los objetos están intervinculados, lo que facilita su detección y uso en comandos y scripts.The objects are interlinked, which makes them easy to discover and use in commands and scripts.

Los trabajos programados aparecen como objetos ScheduledJobDefinition .Scheduled jobs appear as ScheduledJobDefinition objects. 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.The ScheduledJobDefinition object has a JobTriggers property that contains the job triggers of the scheduled job and an Options property that contains the job options. Los objetos ScheduledJobTriggers y ScheduledJobOptions que representan los desencadenadores de trabajo y las opciones de trabajo, respectivamente, tienen una propiedad JobDefinition que contiene el trabajo programado con el que están asociados.The ScheduledJobTriggers and ScheduledJobOptions objects that represent job triggers and job options, respectively, each have a JobDefinition property that contains the scheduled job with which they are associated. Esta interconexión recursiva facilita la búsqueda de los desencadenadores y las opciones de un trabajo programado y la búsqueda, el script y la visualización del trabajo programado al que está asociada cualquier opción de trabajo o desencadenador de trabajo.This recursive interconnection makes it easy to find the triggers and options of a scheduled job and to find, script, and display the scheduled job to which any job trigger or job option is associated.

Consulte tambiénSee also

about_Scheduled_Jobs_Basicsabout_Scheduled_Jobs_Basics

about_Scheduled_Jobs_Advancedabout_Scheduled_Jobs_Advanced

about_Scheduled_Jobs_Troubleshootingabout_Scheduled_Jobs_Troubleshooting

Cmdlets del módulo PSScheduledJobPSScheduledJob module cmdlets

Programador de tareasTask Scheduler