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.