Почему еженедельные задания, созданные с помощью PowerShell с использованием другого пользователя, завершаются с ошибкой 0x41306

У нас есть несколько сценариев, которые создают запланированные задания с помощью PowerShell как часть нашего приложения. Недавно, тестируя их, я заметил, что некоторые из них всегда сразу же терпят неудачу, и никаких результатов не выдается (они даже не появляются в списке Get-Job).

После многих дней настройки, нам удалось определить, что это связано с любыми заданиями, которые настроены на еженедельное выполнение. Ниже приведен сценарий, который создает два задания, выполняющих одно и то же. Когда мы запускаем его на нашем домене и предоставляем учетные данные пользователя домена, а затем заставляем оба задания запуститься в графическом интерфейсе планировщика задач (щелкните правой кнопкой мыши -> Run), ежедневное задание выполняется нормально (результат 0x0), а еженедельное - с ошибкой (0x41306).

Примечание: Если я не указываю параметр -Credential, оба задания работают нормально. Задания терпят неудачу только если задание является еженедельным и выполняется от имени этого пользователя домена.

Я не могу найти информацию о том, почему это происходит, и не могу придумать причин, по которым задания, выполняемые еженедельно, вели бы себя по-другому. Вкладка "История£ в планировщике заданий не содержит практически никакой полезной информации, только "Задание остановлено из-за запроса пользователя" и "Задание завершено", оба из которых не содержат никакой полезной информации:

Task Scheduler завершил "{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}" экземпляр "\Microsoft\Windows\PowerShell\ScheduledJobs\Test1" задание. Планировщик задач остановлен "{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}" задачи "\Microsoft\Windows\PowerShell\ScheduledJobs\Test1" по запросу пользователя "MyDomain\SomeUser" .

Что с этим происходит? Почему еженедельные задания выполняются по-разному, и как я могу решить эту проблему?

Это PowerShell v3 на Windows Server 2008 R2. Я не смог воспроизвести это локально, но у меня нет пользователя, настроенного так же, как в нашем производственном домене (я работаю над этим, но я хотел написать об этом как можно скорее в надежде, что кто-то знает, что происходит!)

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)

Мне пришлось самому разобраться в этом вопросе, и вот что я нашел.

В документации poweshell я нашел следующее:

Get-ScheduledJob получает только запланированные задания, созданные текущим пользователем с помощью команды Register-ScheduledJob.

http://technet.microsoft.com/en-us/library/hh849784.aspx

Это приводит к тому, что если вы создаете задания под пользователем 'A', а затем запускаете сценарии, пытаясь получить к ним доступ под пользователем 'B', возникает ошибка, говорящая о том, что задание не может быть найдено.

Комментарии (2)

Поскольку один и тот же сценарий добавляет оба запланированных задания, вероятность того, что разница заключается в учетных данных сеанса/текущего пользователя, невелика.

Я бы поменял порядок удаления и добавления каждого задания, чтобы сначала выполнялось ежедневное задание, а затем еженедельное. Если это ничего не изменит, значит, дело в параметрах задания, а не в чем-то в механизме состояния планировщика, который, возможно, неинициализирован по ошибке.

Комментарии (4)