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

Почему команда PowerShell «Restart-Service Tomcat6» не работает при запуске из запланированной задачи?

Когда я пытаюсь запустить задачу, я получаю следующую ошибку в истории запланированных задач:

Task Scheduler successfully completed task "\Restart Tomcat" ,
instance "{264b4620-5f3b-6c5f-a6cb-1625a7fa57de}" ,
action "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.EXE"
with return code 1.

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

Когда я запускаю командную строку как ДОМЕН \ tomcat.restarter с участием:

runas /user:DOMAIN\tomcat.restart cmd

И запускаем:

powershell -Command "Restart-Service Tomcat6"

затем echo %errorlevel% печатает 0 и Tomcat перезапускается. Это показывает, что SDDL в службе Tomcat6 достаточно для этой цели и что ДОМЕН \ tomcat.restarter может перезапустить его.

Если я изменю аргументы запланированной задачи на -Command "'hello world'" > '%TEMP%\Temp.log' я получил return code 0 в истории задач и hello world появляется в C:\Users\tomcat.restarter\AppData\Local\Temp\Temp.log. Это показывает, что Войдите в систему как пакетное задание Право пользователя действует для ДОМЕН \ tomcat.restarter, что он может запускать Powershell и записывать файлы.

ОБНОВЛЕНИЕ: дальнейшее расследование

Я создал restart.bat в D: \ tomcat \ bin и установил Program / script на restart.bat, аргументы > "%TEMP%\Temp.log" 2>&1 и начать в D:\tomcat\bin.

Листинг restart.bat:

powershell -Command "Restart-Service Tomcat6"

Я получаю следующее в C:\Users\tomcat.restarter\AppData\Local\Temp\Temp.log Я получаю следующий контент:

D:\tomcat\bin>powershell -Command "Restart-Service Tomcat6" 
Restart-Service : Cannot open Tomcat6 service on computer '.'.
At line:1 char:16
+ Restart-Service <<<<  Tomcat6
    + CategoryInfo          : NotSpecified: (:) [Restart-Service], InvalidOper 
   ationException
    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.Power 
   Shell.Commands.RestartServiceCommand

Почему powershell -Command "Restart-Service Tomcat6" сбой при запуске из запланированной задачи?

tl; dr

Мой SDDL был неполным. Мне нужно было добавить ЮЗ (EnumDeps) к уже добавленному LCRPWP разрешения в SDDL.

Длинная версия

Вот (очищенная) версия моего (сломанного) SDDL:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;LCRPWP;;;S-1-1-11-1111111111-1111111111-1111111111-1111)

Проблема в разрешениях последнего пункта:

(A;;LCRPWP;;;S-1-1-11-1111111111-1111111111-1111111111-1111)

SID С-1-1-11-1111111111-1111111111-1111111111-1111 правильно для группы ДОМЕН \ Tomcat Restarters который ДОМЕН \ tomcat.restarter является членом. Это правильно. Предоставленные разрешения (LCRPWP) недостаточны для Рестарт-Сервис.

Для Рестарт-Сервис Для работы командлета необходимо право перечислять зависимые службы. В SDDL это ЮЗ (EnumDeps) в строке SDDL. я имел LCRPWP что позволяет QueryStat, Start и Stop.

Правильный SDDL для Tomcat 6 для меня:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;LCSWRPWP;;;S-1-1-11-1111111111-1111111111-1111111111-1111)

Загадка в том, почему Powershell может работать Рестарт-Сервис из командной строки runas, но не из планировщика задач.

Я получил необходимое откровение, прочитав ответ @splattered бит на его собственную аналогичную проблему с Рестарт-Сервис в https://serverfault.com/a/357753/57073.

Я собирался добавить это в качестве комментария, но обработка кода ужасна:

Не могли бы вы добавить несколько строк, чтобы получить дополнительную информацию?

$1 = Get-Service *tomcat*
Restart-Service $1
$1 >log.log
$error >>log.log

$ error должен выводить всю информацию об ошибках, сгенерированную в этом сеансе.

$ 1 просто покажет, что он нашел, когда ищет службу Tomcat. на случай, если по какой-либо причине он этого не увидит.

Требует ли команда повышения? Даже если у вас полностью отключен UAC, для запланированной задачи потребуется установить флажок для получения повышенных прав.