Почему еженедельные задания, созданные с помощью 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)

2 ответа

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

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

Я только что должен был понять это сам, вот что я нашел.

В документации Poweshell я обнаружил следующее:

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

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

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

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