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.