Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: Windows PowerShell 3.0
TÓPICO
about_Scheduled_Jobs_Troubleshooting
DESCRIÇÃO BREVE
Explica como resolver problemas em trabalhos agendados.
DESCRIÇÃO LONGA
Esta seção descreve alguns dos problemas que você pode encontrar ao usar os recursos de trabalho agendado do Windows PowerShell® e sugere soluções para esses problemas.
Antes de usar Windows PowerShell trabalhos agendados, consulte about_Scheduled_Jobs e os trabalhos agendados relacionados sobre tópicos.
Este tópico contém as seções a seguir:
-NÃO É POSSÍVEL ENCONTRAR OS RESULTADOS DO TRABALHO
– TRABALHO AGENDADO NÃO É EXECUTADO.
-NÃO É POSSÍVEL OBTER TRABALHO AGENDADO: TRABALHO AGENDADO ESTÁ CORROMPIDO
-CMDLETS DE TRABALHO NÃO É POSSÍVEL LOCALIZAR CONSISTENTEMENTE TRABALHOS AGENDADOS
NÃO É POSSÍVEL ENCONTRAR OS RESULTADOS DO TRABALHO
-Método básico para obter resultados de trabalho no Windows PowerShell
Quando um trabalho agendado é executado, ele cria uma "instância" do trabalho agendado. Para exibir, gerenciar e obter os resultados das instâncias do trabalho agendado, use os cmdlets do trabalho.
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" (sem as aspas) ou use qualquer cmdlet do trabalho agendado, como Get-ScheduledJob.
Para obter uma lista de todas as instâncias de um trabalho agendado, use o cmdlet Get-Job.
PS C:\> Import-Module PSScheduledJob PS C:\> Get-Job ProcessJob Id Name PSJobTypeName State HasMoreData Location -- ---- ------------- ----- ----------- -------- 43 ProcessJob PSScheduledJob Completed False localhost 44 ProcessJob PSScheduledJob Completed False localhost 45 ProcessJob PSScheduledJob Completed False localhost 46 ProcessJob PSScheduledJob Completed False localhost 47 ProcessJob PSScheduledJob Completed False localhost 48 ProcessJob PSScheduledJob Completed False localhost 49 ProcessJob PSScheduledJob Completed False localhost 50 ProcessJob PSScheduledJob Completed False localhostO comando a seguir usa o cmdlet Format-Table para exibir as propriedades de nome, ID e PSBeginTime de uma instância de trabalho agendado em uma tabela.
PS C:\> Get-Job ProcessJob | Format-Table -Property Name, ID, PSBeginTime -Auto Name Id PSBeginTime ---- -- --------- 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 AMPara obter os resultados de uma instância de um trabalho agendado, use o cmdlet Receive-Job. O comando a seguir obtém os resultados da instância mais recente do ProcessJob (ID = 50).
PS C:\> Receive-Job -ID 50-Método básico para localizar os resultados do trabalho em disco
Para gerenciar trabalhos agendados, use os cmdlets de trabalho, como Get-Job e Receive-Job.
Se o trabalho Get não obtém a instância de trabalho ou Receive-Job não obtiver os resultados do trabalho, você pode pesquisar os arquivos de histórico de execução para o trabalho no disco. O histórico de execução contém um registro de todas as instâncias de trabalho disparados.
Verifique se existe um diretório chamado de carimbo de hora no diretório para uma tarefa agendada no seguinte caminho:
$home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob \<ScheduledJobName>\OutputNormalmente:
C:\Users\<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob \<ScheduledJobName>\OutputPor exemplo, o comando a seguir obtém o histórico de execução em disco do trabalho agendado ProcessJob.
PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell \ScheduledJobs\ProcessJob\Output 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-376Cada diretório chamado timestamp representa uma instância de trabalho. Os resultados de cada instância de trabalho são salvos em um arquivo Results, xml no diretório denominado timestamp.
Por exemplo, o comando a seguir obtém os arquivos Results.xml para cada instância salva do trabalho agendado ProcessJob.
PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs \ProcessJob\Output\*\Results.xml Directory: C:\Users\User01\Appdata\Local\Microsoft\Windows\PowerShell \ScheduledJobs\ProcessJob\OutputSe o arquivo Results.xml estiver ausente, Windows PowerShell não é possível retornar ou exibir os resultados do trabalho.
-- O cmdlet de trabalho não poderá obter instâncias de trabalho agendado ou seus resultados porque o módulo PSScheduledJob não será importado à sessão.
OBSERVAÇÃO: Antes de usar um cmdlet de trabalho em instâncias do trabalho agendado, verifique se o módulo PSScheduledJob é incluído na sessão. Sem o módulo, os cmdlets de trabalho não é possível obter instâncias de trabalho agendado ou seus resultados.
Para importar o módulo PSScheduledJob, digite:
Import-Module PSScheduledJob-- O cmdlet Receive-Job pode já ter retornado os resultados na sessão atual.
Se o trabalho de recebimento não retornar resultados de instância de trabalho, talvez seja porque um comando Receive-Job foi executado para essa instância de trabalho na sessão atual sem o parâmetro Keep.
Quando você usa o Receive-Job sem o parâmetro Keep, Receive-Job retorna o resultados do trabalho e define a propriedade HasMoreData da instância de trabalho como Falsa para indicar que ele retornou todos os resultados para a instância de trabalho e não há mais resultados para retornar. Esta configuração é adequada para trabalhos de segundo plano padrão, mas não para instâncias de trabalhos agendados, que são salvos em disco.
Para obter o trabalho de instância resultados novamente, inicie uma nova Windows PowerShell sessão (tipo "PowerShell" sem as aspas), importe o módulo PSScheduledJob e repita o comando Receive-Job.
PS C:\> Receive-Job -ID 50 PS C:\> #No results PS C:\> PowerShell Windows PowerShell Copyright (C) 2012 Microsoft Corporation. All rights reserved. PS C:\> Import-Module PSScheduledJob PS C:\> Receive-Job -ID 50 Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1213 33 12348 21676 88 25.71 1608 CcmExec 29 4 1168 2920 43 0.02 748 conhost 46 6 2208 4612 45 0.03 1640 conhost ...Para obter o resultado de uma instância de trabalho mais de uma vez em uma sessão, use o parâmetro de manutenção do cmdlet Receive-Job.
PS C:\> Import-Module PSScheduledJob PS C:\> Receive-Job -ID 50 -Keep Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1213 33 12348 21676 88 25.71 1608 CcmExec 29 4 1168 2920 43 0.02 748 conhost 46 6 2208 4612 45 0.03 1640 conhost PS C:\> Receive-Job -ID 50 -Keep Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1213 33 12348 21676 88 25.71 1608 CcmExec 29 4 1168 2920 43 0.02 748 conhost 46 6 2208 4612 45 0.03 1640 conhost-- A tarefa agendada pode estar corrompida.
Se uma tarefa agendada for corrompida, Windows PowerShell exclui o trabalho agendado corrompido e os seus resultados. Não é possível recuperar os resultados de um trabalho agendado corrompido.
Para determinar se ainda existe um trabalho agendado, use o cmdlet Get-ScheduledJob.
PS C:\> Get-ScheduledJob– O número de resultados pode ter excedido ExecutionHistoryLength do trabalho agendado.
A propriedade ExecutionHistoryLength de um trabalho agendado determina quantas instâncias de trabalho e seus resultados são salvas em disco. O valor padrão é 32. Quando o número de instâncias de um trabalho agendado excede esse valor, Windows PowerShell exclui a instância de trabalho mais antiga para abrir espaço para cada nova instância de trabalho.
Para obter o valor da propriedade ExecutionHistoryLength de um trabalho agendado, use o seguinte formato de comando:
(Get-ScheduledJob <JobName>).ExecutionHistoryLengthPor exemplo, o comando a seguir obtém o valor da propriedade da propriedade ExecutionHistoryLength do trabalho agendado ProcessJob.
PS C:\> (Get-ScheduledJob ProcessJob).ExecutionHistoryLengthPara definir ou alterar o valor da propriedade ExecutionHistoryLength, use o parâmetro MaxResultCount dos cmdlets do registro ScheduledJob e ScheduledJob do conjunto.
O comando a seguir aumenta o valor da propriedade ExecutionHistoryLength como 50.
PS C:\> Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 50– Os resultados da instância de trabalho podem ter sido excluídos
O parâmetro ClearExecutionHistory do cmdlet Set-ScheduledJob exclui o histórico de execução de um trabalho. Você pode usar esse recurso para liberar espaço em disco ou excluir os resultados que não são necessários, ou já usados, analisados ou salvos em um local diferente.
Para excluir o histórico de execução de um trabalho agendado, use o parâmetro ClearExecutionHistory do trabalho agendado.
O comando a seguir exclui o histórico de execução do trabalho agendado ProcessJob.
PS C:\> Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistoryAlém disso, o cmdlet Remove-Job exclui resultados do trabalho. Quando você usa o Remove-Job para excluir um trabalho agendado, ele exclui todas as instâncias do trabalho no disco, incluindo o histórico de execução e todos os resultados do trabalho.
– Trabalhos iniciados usando o cmdlet Start-Job não são salvos em disco.
Quando você usa o trabalho inicial para iniciar um trabalho agendado, em vez de usar um gatilho de trabalho, o trabalho inicial inicia um trabalho padrão de segundo plano. O trabalho de segundo plano e seus resultados não são armazenados no histórico de execução do trabalho em disco.
Você pode usar o cmdlet Get-Job para obter o trabalho e o cmdlet Receive-Job para obter os resultados do trabalho, mas os resultados estão disponíveis apenas até você recebê-los, a menos que você use o parâmetro de manutenção do cmdlet Receive-Job.
Além disso, os trabalhos em segundo plano e seus resultados são específicos da sessão; existem apenas na sessão na qual eles são criados. Se você excluir o trabalho (remover trabalho), fechar a sessão ou fechar o Windows PowerShell, a instância de trabalho e seus resultados são excluídos.
TRABALHO AGENDADO NÃO É EXECUTADO.
– Trabalhos agendados não são executados automaticamente se os gatilhos de trabalho ou o trabalho agendado estiverem desabilitados.
Use o cmdlet Get-ScheduledJob para obter o trabalho agendado. Verifique se o valor da propriedade Enabled do trabalho agendado é True ($true).
PS C:\> Get-ScheduledJob ProcessJob Id Name Triggers Command Enabled -- ---- -------- ------- ------- 4 ProcessJob {1, 2} Get-Process True PS C:\> (Get-ScheduledJob ProcessJob).Enabled TrueUse o cmdlet Get-JobTrigger para obter os gatilhos de trabalho do trabalho agendado. Verifique se o valor da propriedade Enabled do gatilho trabalho é True ($true)
PS C:\> Get-ScheduledJob ProcessJob | Get-JobTrigger Id Frequency Time DaysOfWeek Enabled -- --------- ---- ---------- ------- 1 Weekly 11/7/2011 5:00:00 AM {Monday, Thursday} True 2 Daily 11/7/2011 3:00:00 PM True PS C:\> Get-ScheduledJob ProcessJob | Get-JobTrigger | Format-Table ID, Enabled -Auto Id Enabled -- ------- 1 True 2 True– Trabalhos agendados não são executados automaticamente se os gatilhos de trabalho forem inválidos.
Por exemplo, um gatilho de trabalho pode especificar uma data no passado ou uma data que não existe, como a 5ª segunda-feira do mês.
– Trabalhos agendados não são executados automaticamente se as condições do disparador o trabalho ou as opções de trabalho não forem atendidas.
Por exemplo, um trabalho agendado é executado apenas quando um determinado usuário faz logon no computador não será executado se o usuário não fizer logon ou só se conecta remotamente.
Examine as opções do trabalho agendado e certifique-se de que estão satisfeitas. Por exemplo, um trabalho agendado que requer que o computador esteja ocioso requer uma conexão de rede ou tem um longo IdleDuration ou uma breve IdleTimeout pode nunca ser executado.
Use o cmdlet Get-ScheduledJobOption para examinar as opções de trabalho e seus valores.
PS C:\> Get-ScheduledJob -Name ProcessJob StartIfOnBatteries : False StopIfGoingOnBatteries : True WakeToRun : True 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.ScheduledJobDefinitionPara obter descrições das opções de trabalho agendado, consulte o tópico de ajuda para o cmdlet New-ScheduledJobOption (https://go.microsoft.com/fwlink/?LinkID=223919).
-- A instância de tarefa agendada pode ter falhado.
Se um comando de trabalho agendado falhar, Windows PowerShell reporte imediatamente através da geração de uma mensagem de erro. No entanto, se o trabalho falhar quando o Agendador de tarefas tentar executá-la, o erro não está disponível para o Windows PowerShell.
Use os seguintes métodos para detectar e corrigir falhas no trabalho.
-- Verifique o log de eventos do Agendador de tarefas para erros. Para verificar o log, use o Visualizador de Eventos ou uma Windows PowerShell comando como o seguinte:
Get-WinEvent -LogName Microsoft-Windows-TaskScheduler/Operational | Where {$_.Message -like "*fail*"}Verifique o registro de trabalho no Agendador de tarefas. Windows PowerShell trabalhos agendados são armazenados na pasta tarefas agendadas abaixo:
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs
-- O trabalho agendado pode não ser executado devido à permissão insuficiente.
Trabalhos agendados são executados com as permissões do usuário que criou o trabalho ou as permissões do usuário que é especificado pelo parâmetro no comando Register ScheduledJob ou ScheduledJob do conjunto de credenciais.
Se esse usuário não tem permissão para executar os comandos ou scripts, o trabalho falhará.
NÃO É POSSÍVEL OBTER O TRABALHO AGENDADO: O TRABALHO AGENDADO ESTÁ CORROMPIDO
Em raras ocasiões, OS trabalhos agendados podem ficar corrompidos ou conter contradições internas que não podem ser resolvidas. Normalmente, isso ocorre quando os arquivos XML para o trabalho agendado são editados manualmente, resultando em um XML inválido.
Quando um trabalho agendado está corrompido, Windows PowerShell tenta excluir o trabalho agendado, seu histórico de execução e seus resultados do disco.
Se ele não é possível remover o trabalho agendado, você obterá uma mensagem de erro do trabalho corrompido toda vez que executar o cmdlet Get-ScheduledJob.
Para remover um trabalho agendado corrompido, use um dos métodos a seguir. Insira o corpo da seção aqui.
-- Exclua o <ScheduledJobName> diretório para o trabalho agendado. Não exclua a pasta ScheduledJob.
O diretório está localizado em $env:UserProfile\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\<ScheduledJobName>
Normalmente:
C:\Users\<UserName>\AppData\Local\Microsoft\Windows\PowerShell \ScheduledJobs\<ScheduledJobName>.– Use o Agendador de tarefas para excluir o trabalho agendado. Windows PowerShell tarefas agendadas são exibidas no caminho do Agendador de tarefas a seguir:
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs\<ScheduledJobName>
CMDLETS DE TRABALHO NÃO PODEM CONSISTENTEMENTE LOCALIZAR TRABALHOS AGENDADOS
Quando o módulo PSScheduledJob não está na sessão atual, os cmdlets de trabalho não podem obter os trabalhos agendados, iniciá-los ou obter seus resultados.
Para importar o módulo PSScheduledJob, digite "Import-Module PSScheduledJob" ou execute ou obtenha qualquer cmdlet no módulo, como o cmdlet Get-ScheduledJob. A partir de Windows PowerShell 3.0, módulos são importados automaticamente quando você obtém ou usa qualquer cmdlet no módulo.
Quando o cmdlet PSScheduledJob não está na sessão atual, a seguinte sequência de comando é possível.
PS C:\> Get-Job ProcessJob
Get-Job : The command cannot find the job because the job name
ProcessJob was not found.
Verify the value of the Name parameter, and then try the command again.
+ CategoryInfo : ObjectNotFound: (ProcessJob:String) [Get-Job],
PSArgumentException
+ FullyQualifiedErrorId : JobWithSpecifiedNameNotFound,Microsoft.PowerShell.
Commands.GetJobCommand
PS C:\> Get-Job
PS C:\> Get-ScheduledJob ProcessJob
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
4 ProcessJob {1} Get-Process True
PS C:\> Get-Job ProcessJob
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
43 ProcessJob PSScheduledJob Completed True localhost
44 ProcessJob PSScheduledJob Completed True localhost
45 ProcessJob PSScheduledJob Completed True localhost
46 ProcessJob PSScheduledJob Completed True localhost
47 ProcessJob PSScheduledJob Completed True localhost
48 ProcessJob PSScheduledJob Completed True localhost
49 ProcessJob PSScheduledJob Completed True localhost
50 ProcessJob PSScheduledJob Completed True localhost
Esse comportamento ocorre porque o comando Get-ScheduledJob importa automaticamente o módulo PSScheduledJob e, em seguida, executa o comando.
CONSULTE TAMBÉM
about_Scheduled_Jobs
about_Scheduled_Jobs_Basics
about_Scheduled_Jobs_Advanced