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

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

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

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

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

Планировщик задач завершил работу экземпляра задачи "\Microsoft\Windows\PowerShell\ScheduledJobs\Test1" "{eabba479-f8fc-4f0e-bf5e-053dfbfe9f62}". Планировщик задач остановил экземпляр "{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)

Редактировать: Добавлено в Connect, как предложено snover:

https://connect.microsoft.com/PowerShell/feedback/details/776801/weekly-tasks-created-via-powershell-using-a-different-user-immediately-fail-with-error-0x41306

Изменить: некоторая дополнительная информация от Джеффа Хикса

Я использовал ваш код для создания тех же самых заданий на моей коробке 2008 R2 под управлением PS v3. Оба задания работали нормально из PowerShell с помощью Start-Job. Но в GUI я получил ту же ошибку для еженедельной работы.

Я получаю тот же результат в Windows 8. Что-то говорит, что служба задач прерывает работу. Я проверил некоторые другие настройки, но они не имели никакого эффекта. Я просмотрел все журналы, которые мог придумать, и все, что они показывают, - это начало работы, загрузка PowerShell, а затем отмена планировщика задач.

Я сбросил еженедельное задание для запуска сегодня немного назад, и оно все еще не удалось. Я также тестировал еженедельное задание, выполняющее что-то отличное от PowerShell, и оно выполнялось просто отлично.

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

5 ответов

У меня была похожая проблема при создании запланированного задания, но я не помню, было ли оно основано на расписании дня. Я нашел переход на учетную запись gMSA для запуска запланированного задания? Что позволило нам поставить задачу на выполнение независимо от того, вошел ли пользователь в систему или нет. В противном случае вы должны указать имя пользователя и пароль, и пользователь не сможет войти в систему или нет.

Я наконец нашел решение этого поведения. Я запланировал выполнение задачи каждое воскресенье для запуска сценария powershell. Сценарий сам по себе работал нормально. Затем я попытался запустить его вручную в планировщике задач. Это закончилось ошибкой 41306. После прочтения ваших комментариев я изменил расписание не для того, чтобы сначала запускать следующее воскресенье, а чтобы запускать в последнее воскресенье (поэтому дата начала уже в прошлом). После этого я мог сразу запустить его без проблем.

Параметры задания по умолчанию могут дать подсказку. Существует множество значений по умолчанию, которые могут помешать выполнению задания. Некоторые из них могут быть специфическими для вашей среды. Более подробная информация здесь: http://technet.microsoft.com/en-us/library/hh849674.aspx

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

Спасибо, Джун Блендер (июнь) Старший программист, Microsoft

В моем случае, когда я смотрел на историю задачи, я обнаружил, что при создании задачи она использовала notepad.exe для попытки выполнения (потому что notepad.exe был установлен по умолчанию для открытия .ps1 файлы; потому что это был быстрый способ редактирования скриптов). Это, очевидно, вызывало проблему, хотя.

Чтобы исправить это, я щелкнул правой кнопкой мыши один из моих PS1 сценарии и выберите open withи выберите значение по умолчанию %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe (путь может отличаться для каждого человека, читающего это, поэтому я бы рекомендовал просто открыть свойства ярлыка PowerShell, чтобы получить конкретный путь).

Затем я попытался снова запустить задачу - Успех!

Таким образом, запланированные задания выполняются в планировщике задач, но в действительности нет тесной интеграции. Когда вы регистрируете запланированное задание, создается определение запланированного задания и, надеюсь, параметры запланированного задания Windows. НИКАКОЕ задание экземпляра запланированного задания не создается до тех пор, пока запланированное задание Windows не выполнит 1) успешно запущенное запланированное задание и 2 не выполнит его достаточно успешно, чтобы оно создало экземпляр.

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

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

Например, допустим, вы указали, что он работает под определенными правами, и что-то не так с учетными данными, или, возможно, изменение разрешений ПОСЛЕ того, как вы зарегистрировали его. Когда триггер произойдет, Windows не сможет запустить запланированную задачу, и, следовательно, код запланированного задания не скажет PS ничего об этом.

Один интересный случай произошел со мной, когда я делал несколько демонстраций. При тестировании на моем ноутбуке он регистрировал его и запускал через 4 секунды, затем я мог видеть экземпляр задания, затем он заканчивал и мог получить результаты.

однако это ВСЕГДА потерпит неудачу, когда я продемонстрирую это. И это потому, что по умолчанию запланированные задачи не запускаются при работе от батареи, а не подключаются к сети, а при выполнении демонстраций я беру свой ноутбук и показываю людям, а меня не подключают.

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

если вы хотите увидеть работу с ошибочным статусом и причиной в следующей версии, оцените мою ошибку при подключении

https://connect.microsoft.com/PowerShell/feedback/details/737587/psv3-scheduledjobs-if-a-trigger-fails-there-is-no-failed-instance-example-uses-multiple-triggers-to-do-this

Другие вопросы по тегам