Acerca de los conceptos básicos de trabajos programadosAbout Scheduled Jobs Basics

Descripción breveShort description

Explica cómo crear y administrar los trabajos programados.Explains how to create and manage scheduled jobs.

Descripción largaLong description

En este documento se muestra cómo realizar tareas básicas de creación y administración de trabajos programados.This document shows how to perform basic tasks of creating and managing scheduled jobs. Para obtener información acerca de las tareas más avanzadas, consulte about_Scheduled_Jobs_Advanced.For information about more advanced tasks, see about_Scheduled_Jobs_Advanced.

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.

Cómo crear un trabajo programadoHow to create a scheduled job

Para crear un trabajo programado, use el Register-ScheduledJob cmdlet.To create a scheduled job, use the Register-ScheduledJob cmdlet. El cmdlet requiere un nombre y los comandos o scripts que ejecuta el trabajo.The cmdlet requires a name and the commands or script that the job runs. Puede ejecutar el trabajo inmediatamente agregando el parámetro RunNow , o bien crear un desencadenador de trabajo y establecer opciones de trabajo al crear el trabajo, o editar un trabajo existente.You can either run the job immediately by adding the RunNow parameter, or create a job trigger and set job options when you create the job, or edit an existing job.

Para crear un trabajo que ejecute un script, use el parámetro filePath para especificar la ruta de acceso al archivo de script.To create a job that runs a script, use the FilePath parameter to specify the path to the script file. Para crear un trabajo que ejecute comandos, use el parámetro ScriptBlock .To create a job that runs commands, use the ScriptBlock parameter.

El Register-ScheduledJob cmdlet crea el ProcessJob , que ejecuta un Get-Process comando.The Register-ScheduledJob cmdlet creates the ProcessJob , which runs a Get-Process command. Este trabajo programado tiene las opciones de trabajo predeterminadas y ningún desencadenador de trabajo.This scheduled job has the default job options and no job trigger.

Register-ScheduledJob -Name ProcessJob -ScriptBlock { Get-Process }
Id         Name            Triggers        Command       Enabled
--         ----            --------        -------       -------
8          ProcessJob      {}              Get-Process   True

Cómo crear un desencadenador de trabajoHow to create a job trigger

Los desencadenadores de trabajo inician automáticamente un trabajo programado.Job triggers start a scheduled job automatically. Un desencadenador de trabajo puede ser una programación única o periódica, o un evento, como cuando un usuario inicia sesión o se inicia Windows.A job trigger can be one-time or recurring schedule or an event, such as when a user logs on or Windows starts. Cada trabajo puede tener cero, uno o varios desencadenadores de trabajo.Each job can have zero, one, or multiple job triggers.

Para crear un desencadenador de trabajo, use el New-JobTrigger cmdlet.To create a job trigger, use the New-JobTrigger cmdlet. El siguiente comando crea un desencadenador de trabajo que inicia un trabajo cada lunes y jueves a las 5:00 A.M.The following command creates a job trigger that starts a job every Monday and Thursday at 5:00 AM. El comando guarda el desencadenador de trabajo en la $T variable.The command saves the job trigger in the $T variable.

$T = New-JobTrigger -Weekly -DaysOfWeek "Monday", "Thursday" -At "5:00 AM"

Los desencadenadores de trabajo son opcionales.Job triggers are optional. Puede iniciar un trabajo programado en cualquier momento agregando el parámetro RunNow al Register-ScheduledJob comando o usando los Start-Job cmdlets.You can start a scheduled job at any time by adding the RunNow parameter to your Register-ScheduledJob command, or by using the Start-Job cmdlets.

Cómo agregar un desencadenador de trabajoHow to add a job trigger

Cuando se agrega un desencadenador de trabajo a un trabajo programado, el desencadenador de trabajo se agrega al archivo XML de trabajo programado para el trabajo programado y se convierte en parte del trabajo programado.When you add a job trigger to a scheduled job, the job trigger is added to the scheduled job XML file for the scheduled job and becomes part of the scheduled job.

Puede Agregar un desencadenador de trabajo a un trabajo programado al crear el trabajo programado o editar un trabajo existente.You can add a job trigger to a scheduled job when you create the scheduled job, or edit an existing job. Puede cambiar el desencadenador de trabajo de un trabajo programado en cualquier momento.You can change the job trigger of a scheduled job at any time.

PowerShell usa algunos de los mismos desencadenadores de trabajo que utiliza Programador de tareas.PowerShell uses some of the same job triggers that Task Scheduler uses. Para obtener información detallada sobre los desencadenadores de trabajo, consulte el tema de ayuda para el cmdlet New-JobTrigger .For detailed information about job triggers, see the help topic for the New-JobTrigger cmdlet.

En el ejemplo siguiente se usa expansión para crear $JobParms los valores de parámetro que se pasan al Register-ScheduledJob cmdlet.The following example uses splatting to create $JobParms which are parameter values that are passed to the Register-ScheduledJob cmdlet. Para obtener más información, vea about_Splatting. MD.For more information, see about_Splatting.md. Register-ScheduledJobUtiliza @JobParms para crear un trabajo programado.The Register-ScheduledJob uses @JobParms to create a scheduled job. Usa el parámetro Trigger para especificar el desencadenador de trabajo en la $T variable.It uses the Trigger parameter to specify the job trigger in the $T variable.

$JobParms = @{
  Name = "ProcessJob"
  ScriptBlock = {Get-Command}
  Trigger = $T
}

Register-ScheduledJob @JobParms

También puede Agregar un desencadenador de trabajo a un trabajo programado existente en cualquier momento.You can also add a job trigger to an existing scheduled job at any time. El Add-JobTrigger cmdlet agrega el desencadenador de trabajo de la $T variable al trabajo programado ProcessJob .The Add-JobTrigger cmdlet adds the job trigger in the $T variable to the ProcessJob scheduled job.

Add-JobTrigger -Name ProcessJob -Trigger $T

Como resultado, el desencadenador de trabajo inicia el ProcessJob automáticamente cada lunes y jueves a las 5:00 a.m.As a result, the job trigger starts the ProcessJob automatically every Monday and Thursday at 5:00 AM.

Cómo obtener un desencadenador de trabajoHow to get a job trigger

Para obtener el desencadenador de trabajo de un trabajo programado, use el Get-JobTrigger cmdlet.To get the job trigger of a scheduled job, use the Get-JobTrigger cmdlet. Use los parámetros Name , ID y InputObject para especificar el trabajo programado, no el desencadenador de trabajo.Use the Name , ID , and InputObject parameters to specify the scheduled job, not the job trigger.

Get-JobTrigger Obtiene el desencadenador de trabajo de ProcessJob.Get-JobTrigger gets the job trigger of the ProcessJob.

Get-JobTrigger -Name ProcessJob
Id   Frequency       Time                   DaysOfWeek              Enabled
--   ---------       ----                   ----------              -------
1    Weekly          11/7/2011 5:00:00 AM   {Monday, Thursday}      True

Cómo crear opciones de trabajoHow to create job options

Las opciones de trabajo establecen condiciones para iniciar y ejecutar el trabajo.Job options establish conditions for starting and running the job. Cada trabajo tiene las opciones de trabajo predeterminadas a menos que las cambie.Every job has the default job options unless you change them. Dado que las opciones de trabajo pueden impedir que un trabajo se ejecute a la hora programada, es importante comprender las opciones de trabajo y usarlas con cuidado.Because job options can prevent a job from running at the scheduled time, it is important to understand the job options and use them carefully.

PowerShell usa las mismas opciones de trabajo que usa Programador de tareas.PowerShell uses the same job options that Task Scheduler uses. Para obtener información detallada sobre las opciones de trabajo, consulte el tema de ayuda sobre New-ScheduledJobOption.For detailed information about the job options, see the help topic for New-ScheduledJobOption.

Las opciones de trabajo se almacenan en el archivo XML del trabajo programado.Job options are stored in the scheduled job XML file. Puede establecer las opciones de trabajo al crear un trabajo programado o cambiarlos en cualquier momento.You can set job options when you create a scheduled job or change them at any time.

El New-ScheduledJobOption cmdlet crea una opción de trabajo programado en la que la opción de trabajo programado WakeToRun está establecida en true.The New-ScheduledJobOption cmdlet creates a scheduled job option in which the WakeToRun scheduled job option is set to True. La opción WakeToRun ejecuta el trabajo programado, incluso si el equipo está en estado de suspensión o hibernación a la hora de inicio programada.The WakeToRun option runs the scheduled job even if the computer is in the Sleep or Hibernate state at the scheduled start time. El comando guarda las opciones de trabajo en la $O variable.The command saves the job options in the $O variable.

$O = New-ScheduledJobOption -WakeToRun

Cómo obtener opciones de trabajoHow to get job options

Para obtener las opciones de trabajo de un trabajo programado, use el Get-ScheduledJobOption cmdlet.To get the job options of a scheduled job, use the Get-ScheduledJobOption cmdlet. Use los parámetros Name , ID y InputObject para especificar el trabajo programado, no las opciones de trabajo.Use the Name , ID , and InputObject parameters to specify the scheduled job, not the job options.

Get-ScheduledJobOption Obtiene las opciones de trabajo de ProcessJob.Get-ScheduledJobOption gets the job options of the ProcessJob.

Get-ScheduledJobOption -Name ProcessJob
StartIfOnBatteries     : False
StopIfGoingOnBatteries : True
WakeToRun              : False
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

Cómo cambiar las opciones de trabajoHow to change job options

Puede cambiar las opciones de trabajo de un trabajo programado cuando cree un trabajo programado o edite un trabajo existente.You can change the job options of a scheduled job when you create a scheduled job or edit an existing job.

Los splatted $JobParms se pasan al Add-JobTrigger cmdlet para crear el trabajo de proceso.The splatted $JobParms are passed to the Add-JobTrigger cmdlet to create the process job. Usa el parámetro ScheduledJobOption para especificar las opciones de trabajo en la $O variable.It uses the ScheduledJobOption parameter to specify the job options in the $O variable.

$JobParms = @{
  Name = "ProcessJob"
  ScriptBlock = {Get-Process}
  ScheduledJobOption = $O
}

Add-JobTrigger @JobParms

También puede cambiar las opciones de trabajo a un trabajo programado existente en cualquier momento.You can also change the job options to an existing scheduled job at any time. El siguiente comando usa el Set-ScheduledJobOption cmdlet para cambiar el valor de la opción WakeToRun de ProcessJob scheduledJob a true.The following command uses the Set-ScheduledJobOption cmdlet to change the value of the WakeToRun option of the ProcessJob scheduledJob to True.

Los Set cmdlets del módulo PSScheduledJob , como el Set-ScheduledJobOption cmdlet, no tienen parámetros de nombre o ID .The Set cmdlets in the PSScheduledJob module, such as the Set-ScheduledJobOption cmdlet, don't have Name or ID parameters. Puede usar el parámetro InputObject para especificar las opciones de trabajo programado o canalizar un trabajo programado desde el Get-ScheduledJobOption cmdlet a Set-ScheduledJobOption .You can use the InputObject parameter to specify the scheduled job options or pipe a scheduled job from Get-ScheduledJobOption cmdlet to Set-ScheduledJobOption.

En este ejemplo se usa el Get-ScheduledJob cmdlet para obtener el ProcessJob.This example uses the Get-ScheduledJob cmdlet to get the ProcessJob. Usa el Get-ScheduledJobOption cmdlet para obtener las opciones de trabajo en ProcessJob y el Set-ScheduledJobOption cmdlet para cambiar la opción de trabajo WakeToRun de ProcessJob a true.It uses the Get-ScheduledJobOption cmdlet to get the job options in the ProcessJob and the Set-ScheduledJobOption cmdlet to change the WakeToRun job option in the ProcessJob to True.

Get-ScheduledJob -Name ProcessJob | Get-ScheduledJobOption |
 Set-ScheduledJobOption -WakeToRun

Cómo obtener instancias de trabajos programadosHow to get scheduled job instances

Cuando se inicia un trabajo programado, PowerShell crea una instancia de trabajo similar a un trabajo en segundo plano estándar de PowerShell.When a scheduled job is started, PowerShell creates a job instance that is similar to a standard PowerShell background job. Puede usar los cmdlets de trabajo, como Get-Job , Stop-Job y Receive-Job para administrar las instancias de trabajo.You can use the job cmdlets, such as Get-Job, Stop-Job and Receive-Job to manage the job instances.

Nota

Para usar los cmdlets de trabajo en instancias de trabajos programados, el módulo PSScheduledJob se debe importar en la sesión.To use the job cmdlets on instances of scheduled jobs, the PSScheduledJob module must be imported into the session. Para importar el módulo PSScheduledJob , escriba Import-Module PSScheduledJob o use cualquier cmdlet de trabajo programado, como Get-ScheduledJob .To import the PSScheduledJob module, type Import-Module PSScheduledJob or use any scheduled job cmdlet, such as Get-ScheduledJob.

Para obtener todas las instancias de los trabajos programados de PowerShell y todos los trabajos estándar activos, use el Get-Job cmdlet.To get all instances of PowerShell scheduled jobs, and all active standard jobs, use the Get-Job cmdlet. El Import-Module cmdlet importa el módulo PSScheduledJob y Get-Job obtiene los trabajos en el equipo local.The Import-Module cmdlet imports the PSScheduledJob module and Get-Job gets the jobs on the local computer.

Import-Module PSScheduledJob
Get-Job

Get-Job Obtiene instancias de ProcessJob en el equipo local.Get-Job gets instances of ProcessJob on the local computer.

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

La pantalla predeterminada no muestra la hora de inicio, que normalmente distingue entre las instancias del mismo trabajo programado.The default display does not show the start time, which typically distinguishes instances of the same scheduled job.

El Get-Job cmdlet envía objetos a través de la canalización.The Get-Job cmdlet sends objects down the pipeline. El Format-Table cmdlet muestra las propiedades Name , ID y BeginTime del trabajo programado.The Format-Table cmdlet displays the Name , ID , and BeginTime properties of the scheduled job.

Get-Job ProcessJob | Format-Table -Property Name, ID, BeginTime
Name       Id BeginTime
----       -- ---------
ProcessJob 43 11/2/2011 3:00:02 AM
ProcessJob 44 11/3/2011 3:00:02 AM
ProcessJob 45 11/4/2011 3:00:02 AM
ProcessJob 46 11/5/2011 3:00:02 AM
ProcessJob 47 11/6/2011 3:00:02 AM
ProcessJob 48 11/7/2011 12:00:01 AM
ProcessJob 49 11/7/2011 3:00:02 AM
ProcessJob 50 11/8/2011 3:00:02 AM

Obtener los resultados del trabajo programadoGet scheduled job results

Para obtener los resultados de una instancia de un trabajo programado, use el Receive-Job cmdlet.To get the results of an instance of a scheduled job, use the Receive-Job cmdlet.

Nota

Para usar los cmdlets de trabajo en instancias de trabajos programados, el módulo PSScheduledJob se debe importar en la sesión.To use the Job cmdlets on instances of scheduled jobs, the PSScheduledJob module must be imported into the session. Para importar el módulo PSScheduledJob , escriba Import-Module PSScheduledJob o use cualquier cmdlet de trabajo programado, como Get-ScheduledJob .To import the PSScheduledJob module, type Import-Module PSScheduledJob or use any scheduled job cmdlet, such as Get-ScheduledJob.

En este ejemplo se obtienen los resultados de la instancia más reciente del trabajo programado ProcessJob (ID. = 51).This examples gets the results of the newest instance of the ProcessJob scheduled job (ID = 51).

Import-Module PSScheduledJob
Receive-Job -ID 51 -Keep

Los resultados de los trabajos programados se guardan en el disco, por lo que no es necesario el parámetro Keep de Receive-Job .The results of scheduled jobs are saved on disk, so the Keep parameter of Receive-Job is not required. Sin embargo, sin el parámetro Keep , puede obtener los resultados de un trabajo programado solo una vez en cada sesión de PowerShell.However, without the Keep parameter, you can get the results of a scheduled job only once in each PowerShell session. Para iniciar una nueva sesión de PowerShell, escriba PowerShell o abra una nueva ventana de PowerShell.To start a new PowerShell session, type PowerShell or open a new PowerShell window.

Consulte tambiénSee also

about_Scheduled_Jobs_Advancedabout_Scheduled_Jobs_Advanced

about_Scheduled_Jobs_Troubleshootingabout_Scheduled_Jobs_Troubleshooting

about_Scheduled_Jobsabout_Scheduled_Jobs

about_Splatting. MDabout_Splatting.md

Cmdlets del módulo PSScheduledJobPSScheduledJob module cmdlets

Programador de tareasTask Scheduler