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

задача PowerShell в планировщике задач не может запускаться с другим -Credential

У нас есть запланированная задача, которая представляет собой сценарий PowerShell. Сценарий выполняет ряд действий с базами данных SQL, доступ к которым контролируется с помощью встроенной защиты. Следовательно, каждое из этих действий должно выполняться процессом, который выполняется под соответствующими учетными данными Windows AD, и необходимо использовать более одного набора учетных данных.

Подробности:

Задача powershell вызывается в планировщике задач следующим образом:

cmd.exe /C ""powershell.exe" -Noninteractive "C:\someDir\SomeScript.ps1" >"C:\logDir\SomeScript.log" 2>&1"

Другими словами, cmd.exe это Program/script вызывается, остаток строки - это Add arguments (optional): часть. (Мы используем этот способ по причинам, не имеющим отношения к рассматриваемому вопросу, отчасти из-за того, как мы спроектировали ведение журнала в разработанных нами библиотеках сценариев.)

В настройках запланированного задания (General), выбираем Run whether user is logged in or not и Run with highest privileges. Идентификатор пользователя, запускающего задачу, позвольте назвать его ad\admin1, имеет права локального администратора.

Внутри сценария SomeScript.ps1, мы вызываем другие скрипты под другими учетными данными через

Start-Process $explicitPowershellExe -NonInteractive -Credential $credential -Wait -ArgumentList @( '-file', $scriptForSqlOperations )

Полномочия $credential предназначены для пользователей, отличных от ad\admin1. Этот вызов молча не запускает powershell, хотя ошибки не возникает. Единственный признак того, что Powershell не запускается, - это событие в "Windows Logs" => System:

Всплывающее окно приложения: powershell.exe - Ошибка приложения: приложение не смогло запуститься правильно (0xc0000142). Щелкните ОК, чтобы закрыть приложение.

Обратите внимание, что мы можем без проблем запустить сценарий, если он выполняется вне запланированной задачи. Запуск скрипта SomeScript.ps1 в сеансе входа в систему для пользователя ad\admin1 успешно работает любым способом. Например, в cmd.exe консоль (работает с администратором), мы можем запустить точный линия

cmd.exe /C ""powershell.exe" -Noninteractive "C:\someDir\SomeScript.ps1" >"C:\logDir\SomeScript.log" 2>&1"

и это удается, или мы можем проще запустить

powershell -Noninteractive "C:\someDir\SomeScript.ps1"

в командной строке, и все идет хорошо. Итак, проблема явно в том, как TaskScheduler настраивает cmd.exe процессы, которые он запускает.

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

Спасибо.