Por que tarefas semanais criadas pelo PowerShell usando um usuário diferente falham com o erro 0x41306

6

Temos alguns scripts que criam trabalhos agendados usando o PowerShell como parte de nosso aplicativo. Ao testá-los recentemente, notei que alguns deles sempre falharam imediatamente e nenhuma saída foi produzida (eles nem aparecem na lista Get-Job ).

Depois de muitos dias de ajustes, conseguimos isolá-lo para qualquer trabalho definido para ser executado semanalmente. Abaixo está um script que cria dois trabalhos que fazem exatamente a mesma coisa. Quando executamos isso em nosso domínio e fornecemos credenciais de um usuário de domínio, forçamos ambos os trabalhos a serem executados na GUI do Agendador de Tarefas (clique com o botão direito - > Executar), o diário é executado corretamente (resultado 0x0) e o semanal falha (0x41306).

Nota: Se eu não fornecer o parâmetro -Credential, ambos os trabalhos funcionam bem. Os trabalhos só falharão se a tarefa for semanal e executada como usuário desse domínio .

Não consigo encontrar informações sobre por que isso está acontecendo, nem penso em nenhum motivo para se comportar de maneira diferente em trabalhos semanais. A guia "Histórico" no Agendador de Tarefas não tem quase nenhuma informação útil, apenas "Parada de tarefa devido a solicitação do usuário" e "Tarefa finalizada", sendo que ambas não têm informações úteis:

Task Scheduler terminated "{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}" instance of the "\Microsoft\Windows\PowerShell\ScheduledJobs\Test1" task. Task Scheduler stopped instance "{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}" of task "\Microsoft\Windows\PowerShell\ScheduledJobs\Test1" as request by user "MyDomain\SomeUser" .

O que há com isso? Por que as tarefas semanais são executadas de maneira diferente e como posso digerir esse problema?

Este é o PowerShell v3 no Windows Server 2008 R2. Não consegui reproduzi-lo localmente, mas não tenho um usuário configurado da mesma forma que em nosso domínio de produção (estou trabalhando nisso, mas queria postar isso o mais rápido possível, na esperança de que alguém sabe o que está acontecendo!).

Import-Module PSScheduledJob

$Action =
{
    "Executing job!"
}

$cred = Get-Credential "MyDomain\SomeUser"

# Remove previous versions (to allow re-running this script)
Get-ScheduledJob Test1 | Unregister-ScheduledJob
Get-ScheduledJob Test2 | Unregister-ScheduledJob

# Create two identical jobs, with different triggers
Register-ScheduledJob "Test1" -ScriptBlock $Action -Credential $cred -Trigger (New-JobTrigger -Weekly -At 1:25am -DaysOfWeek Sunday)
Register-ScheduledJob "Test2" -ScriptBlock $Action -Credential $cred -Trigger (New-JobTrigger -Daily -At 1:25am)
    
por Danny Tuppeny 17.01.2013 / 15:38

2 respostas

-1

Eu acabei de descobrir isso, então aqui está o que eu encontrei.

Na documentação do poweshell, encontrei o seguinte:

Get-ScheduledJob obtém apenas os trabalhos agendados que são criados pelo usuário atual usando o cmdlet Register-ScheduledJob.

link

O impacto disso é que, se você criar trabalhos com o usuário 'A' e, em seguida, executar scripts tentando acessá-los com o usuário 'B', será exibido um erro informando que não é possível encontrar o trabalho.

    
por 07.03.2013 / 00:59
-1

Como o mesmo script adiciona os dois trabalhos agendados, a possibilidade de que a diferença esteja nas credenciais da sessão / usuário atual provavelmente não será o caso.

Eu trocaria a ordem na qual você removeria e adicionaria cada trabalho, para lidar com o trabalho diário primeiro e depois com o trabalho semanal. Se isso não mudar nada, então são os parâmetros do trabalho e não algo no mecanismo de estado do planejador que talvez não tenha sido inicializado com erro.

    
por 08.09.2014 / 12:24