about_Scheduled_Jobs_Basics

Descrição breve

Explica como criar e gerenciar trabalhos agendados.

Descrição longa

Este documento mostra como executar tarefas básicas de criação e gerenciamento de trabalhos agendados. Para obter informações sobre tarefas mais avançadas, consulte about_Scheduled_Jobs_Advanced.

Para obter mais informações sobre os cmdlets contidos no módulo PSScheduledJob , consulte PSScheduledJob.

Como criar um trabalho agendado

Para criar um trabalho agendado, use o Register-ScheduledJob cmdlet. O cmdlet requer um nome e os comandos ou script que o trabalho executa. Você pode executar o trabalho imediatamente adicionando o parâmetro RunNow ou criar um gatilho de trabalho e definir opções de trabalho ao criar o trabalho ou editar um trabalho existente.

Para criar um trabalho que executa um script, use o parâmetro FilePath para especificar o caminho para o arquivo de script. Para criar um trabalho que executa comandos, use o parâmetro ScriptBlock .

O Register-ScheduledJob cmdlet cria o ProcessJob, que executa um Get-Process comando. Esse trabalho agendado tem as opções de trabalho padrão e nenhum gatilho de trabalho.

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

Como criar um gatilho de trabalho

Os acionadores de trabalho iniciam um trabalho agendado automaticamente. Um gatilho de trabalho pode ser um agendamento único ou recorrente ou um evento, como quando um usuário faz logon ou o Windows é iniciado. Cada trabalho pode ter zero, um ou vários gatilhos de trabalho.

Para criar um gatilho de trabalho, use o New-JobTrigger cmdlet. O comando a seguir cria um gatilho de trabalho que inicia um trabalho todas as segundas e quintas-feiras às 5:00 AM. O comando salva o gatilho de trabalho na $T variável.

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

Disparadores de trabalho são opcionais. Você pode iniciar um trabalho agendado a qualquer momento adicionando o parâmetro RunNow ao comando Register-ScheduledJob ou usando os Start-Job cmdlets.

Como adicionar um gatilho de trabalho

Quando você adiciona um gatilho de trabalho a um trabalho agendado, o gatilho de trabalho é adicionado ao arquivo XML do trabalho agendado para o trabalho agendado e se torna parte do trabalho agendado.

Você pode adicionar um gatilho de trabalho a um trabalho agendado ao criar o trabalho agendado ou editar um trabalho existente. Você pode alterar o gatilho de trabalho de um trabalho agendado a qualquer momento.

O PowerShell usa alguns dos mesmos gatilhos de trabalho que o Agendador de Tarefas usa. Para obter informações detalhadas sobre gatilhos de trabalho, consulte o tópico de ajuda do cmdlet New-JobTrigger .

O exemplo a seguir usa splatting para criar $JobParms quais são os valores de parâmetro que são passados para o Register-ScheduledJob cmdlet. Para obter mais informações, consulte about_Splatting.md. O Register-ScheduledJob usa @JobParms para criar um trabalho agendado. Ele usa o parâmetro Trigger para especificar o gatilho de trabalho na $T variável.

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

Register-ScheduledJob @JobParms

Você também pode adicionar um gatilho de trabalho a um trabalho agendado existente a qualquer momento. O Add-JobTrigger cmdlet adiciona o gatilho de trabalho na $T variável ao trabalho agendado ProcessJob .

Add-JobTrigger -Name ProcessJob -Trigger $T

Como resultado, o gatilho de trabalho inicia o ProcessJob automaticamente todas as segundas e quintas-feiras às 5:00.

Como obter um gatilho de trabalho

Para obter o gatilho de trabalho de um trabalho agendado, use o Get-JobTrigger cmdlet. Use os parâmetros Name, ID e InputObject para especificar o trabalho agendado, não o gatilho de trabalho.

Get-JobTrigger obtém o gatilho de trabalho do ProcessJob.

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

Como criar opções de trabalho

As opções de trabalho estabelecem condições para iniciar e executar o trabalho. Cada trabalho tem as opções de trabalho padrão, a menos que você as altere. Como as opções de trabalho podem impedir que um trabalho seja executado no horário agendado, é importante entender as opções de trabalho e usá-las com cuidado.

O PowerShell usa as mesmas opções de trabalho que o Agendador de Tarefas usa. Para obter informações detalhadas sobre as opções de trabalho, consulte o tópico de ajuda para New-ScheduledJobOption.

As opções de trabalho são armazenadas no arquivo XML do trabalho agendado. Você pode definir opções de trabalho ao criar um trabalho agendado ou alterá-las a qualquer momento.

O New-ScheduledJobOption cmdlet cria uma opção de trabalho agendado na qual a opção de trabalho agendado WakeToRun é definida como True. A opção WakeToRun executa o trabalho agendado mesmo se o computador estiver no estado de suspensão ou hibernação na hora de início agendada. O comando salva as opções de trabalho na $O variável.

$O = New-ScheduledJobOption -WakeToRun

Como obter opções de trabalho

Para obter as opções de trabalho de um trabalho agendado, use o Get-ScheduledJobOption cmdlet. Use os parâmetros Name, ID e InputObject para especificar o trabalho agendado, não as opções de trabalho.

Get-ScheduledJobOption obtém as opções de trabalho do 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

Como alterar as opções de trabalho

Você pode alterar as opções de trabalho de um trabalho agendado ao criar um trabalho agendado ou editar um trabalho existente.

Os splatted $JobParms são passados para o Add-JobTrigger cmdlet para criar o trabalho de processo. Ele usa o parâmetro ScheduledJobOption para especificar as opções de trabalho na $O variável.

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

Add-JobTrigger @JobParms

Você também pode alterar as opções de trabalho para um trabalho agendado existente a qualquer momento. O comando a seguir usa o Set-ScheduledJobOption cmdlet para alterar o valor da opção WakeToRun do ProcessJob scheduledJob para True.

Os Set cmdlets no módulo PSScheduledJob , como o Set-ScheduledJobOption cmdlet, não têm parâmetros Name ou ID . Você pode usar o parâmetro InputObject para especificar as opções de trabalho agendado ou canalizar um trabalho agendado do Get-ScheduledJobOption cmdlet para o Set-ScheduledJobOption.

Este exemplo usa o Get-ScheduledJob cmdlet para obter o ProcessJob. Ele usa o Get-ScheduledJobOption cmdlet para obter as opções de trabalho no ProcessJob e o Set-ScheduledJobOption cmdlet para alterar a opção de trabalho WakeToRun no ProcessJob para True.

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

Como obter instâncias de trabalho agendadas

Quando um trabalho agendado é iniciado, o PowerShell cria uma instância de trabalho semelhante a um trabalho em segundo plano padrão do PowerShell. Você pode usar os cmdlets de trabalho, como Get-Job, Stop-Job e Receive-Job para gerenciar as instâncias de trabalho.

Observação

Para usar os cmdlets de trabalho em instâncias de trabalhos agendados, o módulo PSScheduledJob deve ser importado para a sessão. Para importar o módulo PSScheduledJob , digite Import-Module PSScheduledJob ou use qualquer cmdlet de trabalho agendado, como Get-ScheduledJob.

Para obter todas as instâncias de trabalhos agendados do PowerShell e todos os trabalhos padrão ativos, use o Get-Job cmdlet. O Import-Module cmdlet importa o módulo PSScheduledJob e Get-Job obtém os trabalhos no computador local.

Import-Module PSScheduledJob
Get-Job

Get-Job obtém instâncias de ProcessJob no computador 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

A exibição padrão não mostra a hora de início, o que normalmente distingue instâncias do mesmo trabalho agendado.

O Get-Job cmdlet envia objetos pelo pipeline. O Format-Table cmdlet exibe as propriedades Name, ID e BeginTime do trabalho agendado.

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

Obter resultados de trabalhos agendados

Para obter os resultados de uma instância de um trabalho agendado, use o Receive-Job cmdlet.

Observação

Para usar os cmdlets Job em instâncias de trabalhos agendados, o módulo PSScheduledJob deve ser importado para a sessão. Para importar o módulo PSScheduledJob , digite Import-Module PSScheduledJob ou use qualquer cmdlet de trabalho agendado, como Get-ScheduledJob.

Este exemplo obtém os resultados da instância mais recente do trabalho agendado ProcessJob (ID = 51).

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

Os resultados dos trabalhos agendados são salvos no disco, portanto, o parâmetro Keep of Receive-Job não é necessário. No entanto, sem o parâmetro Manter , você pode obter os resultados de um trabalho agendado apenas uma vez em cada sessão do PowerShell. Para iniciar uma nova sessão do PowerShell, digite PowerShell ou abra uma nova janela do PowerShell.

Confira também