about_Scheduled_Jobs_Basics

Descripción breve

Explica cómo crear y administrar los trabajos programados.

Descripción larga

En este documento se muestra cómo realizar tareas básicas de creación y administración de trabajos programados. Para obtener información sobre las tareas más avanzadas, consulte about_Scheduled_Jobs_Advanced.

Para obtener más información sobre los cmdlets incluidos en el módulo PSScheduledJob , consulte PSScheduledJob.

Creación de un trabajo programado

Para crear un trabajo programado, use el Register-ScheduledJob cmdlet . El cmdlet requiere un nombre y los comandos o script que ejecuta el trabajo. 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.

Para crear un trabajo que ejecute un script, use el parámetro FilePath para especificar la ruta de acceso al archivo de script. Para crear un trabajo que ejecute comandos, use el parámetro ScriptBlock .

El Register-ScheduledJob cmdlet crea processJob, que ejecuta un Get-Process comando. Este trabajo programado tiene las opciones de trabajo predeterminadas y ningún desencadenador de trabajo.

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

Creación de un desencadenador de trabajo

Los desencadenadores de trabajo inician automáticamente un trabajo programado. Un desencadenador de trabajo puede ser una programación única o periódica o un evento, como cuando un usuario inicia sesión o Windows. Cada trabajo puede tener cero, uno o varios desencadenadores de trabajo.

Para crear un desencadenador de trabajo, use el New-JobTrigger cmdlet . El comando siguiente crea un desencadenador de trabajo que inicia un trabajo todos los lunes y jueves a las 5:00 a. m. El comando guarda el desencadenador de trabajo en la $T variable .

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

Los desencadenadores de trabajo son opcionales. Puede iniciar un trabajo programado en cualquier momento agregando el parámetro RunNow al Register-ScheduledJob comando o mediante los Start-Job cmdlets .

Adición de un desencadenador de trabajo

Al agregar un desencadenador de trabajo a un trabajo programado, el desencadenador de trabajo se agrega al archivo XML del trabajo programado para el trabajo programado y se convierte en parte del trabajo programado.

Puede agregar un desencadenador de trabajo a un trabajo programado al crear el trabajo programado o editar un trabajo existente. Puede cambiar el desencadenador de trabajo de un trabajo programado en cualquier momento.

PowerShell usa algunos de los mismos desencadenadores de trabajo que usa el Programador de tareas. Para obtener información detallada sobre los desencadenadores de trabajos, consulte el tema de ayuda del cmdlet New-JobTrigger .

En el Register-ScheduledJob ejemplo siguiente se usa la expansión para crear $JobParms los valores de parámetro que se pasan al cmdlet . Para obtener más información, consulte about_Splatting.md. Register-ScheduledJob usa @JobParms para crear un trabajo programado. Usa el parámetro Trigger para especificar el desencadenador de trabajo en la $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. El Add-JobTrigger cmdlet agrega el desencadenador de trabajo en la $T variable al trabajo programado processJob .

Add-JobTrigger -Name ProcessJob -Trigger $T

Como resultado, el desencadenador de trabajo inicia processJob automáticamente todos los lunes y jueves a las 5:00 a. m.

Obtención de un desencadenador de trabajo

Para obtener el desencadenador de trabajo de un trabajo programado, use el Get-JobTrigger cmdlet . Use los parámetros Name, ID y InputObject para especificar el trabajo programado, no el desencadenador de trabajo.

Get-JobTrigger obtiene el desencadenador de trabajo de ProcessJob.

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

Creación de opciones de trabajo

Las opciones de trabajo establecen condiciones para iniciar y ejecutar el trabajo. Cada trabajo tiene las opciones de trabajo predeterminadas a menos que las cambie. Dado que las opciones de trabajo pueden impedir que un trabajo se ejecute en el momento programado, es importante comprender las opciones de trabajo y usarlas cuidadosamente.

PowerShell usa las mismas opciones de trabajo que usa el Programador de tareas. Para obtener información detallada sobre las opciones de trabajo, consulte el tema de ayuda de New-ScheduledJobOption.

Las opciones de trabajo se almacenan en el archivo XML del trabajo programado. Puede establecer opciones de trabajo al crear un trabajo programado o cambiarlas en cualquier momento.

El New-ScheduledJobOption cmdlet crea una opción de trabajo programada en la que la opción de trabajo programado WakeToRun está establecida en True. La opción WakeToRun ejecuta el trabajo programado incluso si el equipo está en estado Suspensión o Hibernación en la hora de inicio programada. El comando guarda las opciones de trabajo en la $O variable .

$O = New-ScheduledJobOption -WakeToRun

Obtención de opciones de trabajo

Para obtener las opciones de trabajo de un trabajo programado, use el Get-ScheduledJobOption cmdlet . Use los parámetros Name, ID y InputObject para especificar el trabajo programado, no las opciones de trabajo.

Get-ScheduledJobOption obtiene las opciones de trabajo de 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 trabajo

Puede cambiar las opciones de trabajo de un trabajo programado al crear un trabajo programado o editar un trabajo existente.

La expansión $JobParms se pasa al Add-JobTrigger cmdlet para crear el trabajo de proceso. Usa el parámetro ScheduledJobOption para especificar las opciones de trabajo en la $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. El siguiente comando usa el Set-ScheduledJobOption cmdlet para cambiar el valor de la opción WakeToRun de ProcessJob scheduledJob a True.

Los Set cmdlets del módulo PSScheduledJob , como el Set-ScheduledJobOption cmdlet , no tienen parámetros Name o ID . Puede usar el parámetro InputObject para especificar las opciones de trabajo programadas o canalizar un trabajo programado del Get-ScheduledJobOption cmdlet a Set-ScheduledJobOption.

En este ejemplo se usa el Get-ScheduledJob cmdlet para obtener 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 en ProcessJob a True.

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

Obtención de instancias de trabajo programadas

Cuando se inicia un trabajo programado, PowerShell crea una instancia de trabajo similar a un trabajo en segundo plano de PowerShell estándar. Puede usar los cmdlets de trabajo, como Get-Job, Stop-Job y Receive-Job para administrar las instancias de trabajo.

Nota:

Para usar los cmdlets de trabajo en instancias de trabajos programados, el módulo PSScheduledJob debe importarse en la sesión. Para importar el módulo PSScheduledJob , escriba Import-Module PSScheduledJob o use cualquier cmdlet de trabajo programado, como Get-ScheduledJob.

Para obtener todas las instancias de trabajos programados de PowerShell y todos los trabajos estándar activos, use el Get-Job cmdlet . El Import-Module cmdlet importa el módulo PSScheduledJob y Get-Job obtiene los trabajos en el equipo local.

Import-Module PSScheduledJob
Get-Job

Get-Job obtiene instancias de ProcessJob en el equipo local.

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 las instancias del mismo trabajo programado.

El Get-Job cmdlet envía objetos a la canalización. El Format-Table cmdlet muestra las propiedades Name, ID y BeginTime del trabajo programado.

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

Obtención de resultados de trabajos programados

Para obtener los resultados de una instancia de un trabajo programado, use el Receive-Job cmdlet .

Nota:

Para usar los cmdlets job en instancias de trabajos programados, el módulo PSScheduledJob debe importarse en la sesión. Para importar el módulo PSScheduledJob , escriba Import-Module PSScheduledJob o use cualquier cmdlet de trabajo programado, como Get-ScheduledJob.

En este ejemplo se obtienen los resultados de la instancia más reciente del trabajo programado ProcessJob (ID = 51).

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

Los resultados de los trabajos programados se guardan en el disco, por lo que el parámetro Keep de Receive-Job no es necesario. Sin embargo, sin el parámetro Keep , puede obtener los resultados de un trabajo programado solo una vez en cada sesión de PowerShell. Para iniciar una nueva sesión de PowerShell, escriba PowerShell o abra una nueva ventana de PowerShell.

Consulte también