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)