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