Compartilhar via


about_Scheduled_Jobs_Troubleshooting

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           localhost
    

    O 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 AM
    

    Para 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>\Output
    

    Normalmente:

            C:\Users\<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob
              \<ScheduledJobName>\Output
    

    Por 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-376
    

    Cada 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\Output
    

    Se 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>).ExecutionHistoryLength
    

    Por exemplo, o comando a seguir obtém o valor da propriedade da propriedade ExecutionHistoryLength do trabalho agendado ProcessJob.

               PS C:\> (Get-ScheduledJob ProcessJob).ExecutionHistoryLength
    

    Para 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 -ClearExecutionHistory
    

    Alé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
        True
    

    Use 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.ScheduledJobDefinition
    

    Para 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