Назад | Перейти на главную страницу

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

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

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

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

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

Планировщик задач прервал выполнение экземпляра «{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», выдается ошибка, указывающая, что он не может найти задание.