about_Scheduled_Jobs_Advanced

Descrição breve

Explica os tópicos avançados de trabalho agendado, incluindo a estrutura de arquivos que é subjacente aos trabalhos agendados.

Descrição longa

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

Diretórios e arquivos de tarefas agendadas

Os trabalhos agendados do PowerShell são trabalhos do PowerShell e tarefas do Agendador de Tarefas. Cada trabalho agendado é registrado no Agendador de Tarefas e salvo em disco no formato XML de serialização do Microsoft .NET Framework.

Quando você cria um trabalho agendado, o PowerShell cria um diretório para o trabalho agendado $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs no diretório do computador local. O nome do diretório é o mesmo que o nome do trabalho.

Veja a seguir um exemplo de diretório ScheduledJobs .

Get-ChildItem $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
Directory: C:\Users\User01\AppData\Local
               \Microsoft\Windows\PowerShell\ScheduledJobs

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         9/29/2011  10:03 AM            ArchiveProjects
d----         9/30/2011   1:18 PM            Inventory
d----        10/20/2011   9:15 AM            Backup-Scripts
d----         11/7/2011  10:40 AM            ProcessJob
d----         11/2/2011  10:25 AM            SecureJob
d----         9/27/2011   1:29 PM            Test-HelpFiles
d----         9/26/2011   4:22 PM            DeployPackage

Cada trabalho agendado tem seu próprio diretório. O diretório contém o arquivo XML do trabalho agendado e um subdiretório de saída .

$Path = "$HOME\AppData\Local\Microsoft\Windows\PowerShell"
$Path += "\ScheduledJobs\ProcessJob"
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell
               \ScheduledJobs\ProcessJob

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         11/1/2011   3:00 PM            Output
-a---         11/1/2011   3:43 PM       7281 ScheduledJobDefinition.xml

O diretório de saída de um trabalho agendado contém seu histórico de execução. Cada vez que um gatilho de trabalho inicia um trabalho agendado, o PowerShell cria um diretório nomeado com carimbo de data/hora no diretório de saída. O diretório de carimbo de data/hora contém os resultados do trabalho em um arquivo Results.xml e o status do trabalho em um arquivo Status.xml .

O comando a seguir mostra os diretórios do histórico de execução para o trabalho agendado ProcessJob .

$Path = "$HOME\AppData\Local\Microsoft"
$Path += "\Windows\PowerShell\ScheduledJobs\ProcessJob\Output"
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft
               \Windows\PowerShell\ScheduledJobs\ProcessJob\Output

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         11/2/2011   3:00 AM            20111102-030002-260
d----         11/3/2011   3:00 AM            20111103-030002-277
d----         11/4/2011   3:00 AM            20111104-030002-209
d----         11/5/2011   3:00 AM            20111105-030002-251
d----         11/6/2011   3:00 AM            20111106-030002-174
d----         11/7/2011  12:00 AM            20111107-000001-914
d----         11/7/2011   3:00 AM            20111107-030002-376
$Path = "$HOME\AppData\Local\Microsoft\Windows\PowerShell\"
$Path += "ScheduledJobs\ProcessJob\Output\20111102-030002-260"
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell
               \ScheduledJobs\ProcessJob\Output\20111102-030002-260

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         11/2/2011   3:00 AM     581106 Results.xml
-a---         11/2/2011   3:00 AM       9451 Status.xml

Você pode abrir e examinar os arquivos ScheduledJobDefinition.xml, Results.xml e Status.xml ou usar o Select-XML cmdlet para analisar os arquivos.

Aviso

Não edite os arquivos XML. Se algum arquivo XML contiver XML inválido, o PowerShell excluirá o trabalho agendado e seu histórico de execução, incluindo os resultados do trabalho.

Inicie um trabalho agendado imediatamente

Você pode iniciar um trabalho agendado imediatamente de duas maneiras:

  • Execute o cmdlet para iniciar qualquer trabalho agendado Start-Job .
  • Adicione o parâmetro RunNow ao comando Register-ScheduledJob para iniciar o trabalho assim que o comando for executado.

Os trabalhos iniciados usando o Start-Job cmdlet são trabalhos em segundo plano padrão do PowerShell, não instâncias do trabalho agendado. Como todos os trabalhos em segundo plano, esses trabalhos são iniciados imediatamente, não estão sujeitos a opções de trabalho ou são afetados por gatilhos de trabalho. A saída do trabalho não é salva no diretório de saída do diretório de trabalho agendado.

O comando a seguir usa o parâmetro DefinitionName do Start-Job cmdlet para iniciar o trabalho agendado ProcessJob.

Start-Job -DefinitionName ProcessJob

Para gerenciar o trabalho e obter os resultados do trabalho, use os cmdlets de trabalho. Para obter mais informações sobre os cmdlets de trabalho, consulte about_Jobs.

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.

Renomear um trabalho agendado

Para renomear um trabalho agendado, use o Set-ScheduledJob parâmetro Name do cmdlet. Quando você renomeia um trabalho agendado, o PowerShell altera o nome do trabalho agendado e o diretório do trabalho agendado. No entanto, ele não altera os nomes das instâncias do trabalho agendado que já foram executadas.

Obtenha horários de início e término

Para obter as datas e horas em que as instâncias de trabalho foram iniciadas e encerradas, use as propriedades PSBeginTime e PSEndTime do objeto ScheduledJob que Get-Job retorna para trabalhos agendados.

O exemplo a seguir usa o parâmetro Property do Format-Table cmdlet para exibir as propriedades PSBeginTime e PSEndTime de cada instância de trabalho em uma tabela. Uma propriedade calculada chamada Label exibe o tempo decorrido de cada instância de trabalho.

Get-job -Name UpdateHelpJob |
  Format-Table -Property ID, PSBeginTime, PSEndTime,
@{Label="Elapsed Time";Expression={$.PsEndTime - $.PSBeginTime}}
Id   PSBeginTime             PSEndTime                Elapsed Time
--   -----------             ---------                ------------
 2   11/3/2011 3:00:01 AM    11/3/2011 3:00:39 AM     00:00:38.0053854
 3   11/4/2011 3:00:02 AM    11/4/2011 3:01:01 AM     00:00:59.1188475
 4   11/5/2011 3:00:02 AM    11/5/2011 3:00:50 AM     00:00:48.3692034
 5   11/6/2011 3:00:01 AM    11/6/2011 3:00:54 AM     00:00:52.8013036
 6   11/7/2011 3:00:01 AM    11/7/2011 3:00:38 AM     00:00:37.1930350
 7   11/8/2011 3:00:01 AM    11/8/2011 3:00:57 AM     00:00:56.2570556
 8   11/9/2011 3:00:03 AM    11/9/2011 3:00:55 AM     00:00:51.8142222
 9   11/10/2011 3:00:02 AM   11/10/2011 3:00:42 AM    00:00:40.7195954

Gerenciar histórico de execução

Você pode determinar o número de resultados de instância de trabalho salvos para cada trabalho agendado e excluir o histórico de execução e os resultados de trabalho salvos de qualquer trabalho agendado.

A propriedade ExecutionHistoryLength de um trabalho agendado determina quantos resultados de instância de trabalho são salvos para o trabalho agendado. Quando o número de resultados salvos excede o valor da propriedade ExecutionHistoryLength , o PowerShell exclui os resultados da instância mais antiga para liberar espaço para os resultados da instância mais recente.

Por padrão, o PowerShell salva o histórico de execução e os resultados de 32 instâncias de cada trabalho agendado. Para alterar esse valor, use os parâmetros MaxResultCount dos Register-ScheduledJob cmdlets or Set-ScheduledJob .

Para excluir o histórico de execução e todos os resultados de um trabalho agendado, use o parâmetro ClearExecutionHistory do Set-ScheduledJob cmdlet. A exclusão desse histórico de execução não impede que o PowerShell salve os resultados de novas instâncias do trabalho agendado.

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. O comando usa o parâmetro MaxResultCount com um valor de 12 para salvar apenas os 12 resultados mais recentes da instância de trabalho do trabalho agendado.

$JobParms = @{
  Name = "ProcessJob"
  ScriptBlock = {Get-Process}
  MaxResultCount = "12"
}

Register-ScheduledJob @JobParms

O comando a seguir usa o parâmetro MaxResultCount do Set-ScheduledJob cmdlet para aumentar o número de resultados de instância salvos para 15.

Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 15

O comando a seguir exclui o histórico de execução e os resultados salvos atuais do trabalho agendado ProcessJob .

Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory

O comando a seguir obtém os valores das propriedades name e ExecutionHistoryLength de todos os trabalhos agendados no computador e os exibe em uma tabela.

Get-ScheduledJob |
  Format-Table -Property Name, ExecutionHistoryLength -AutoSize

Confira também