Когда я пытаюсь запустить задачу, я получаю следующую ошибку в истории запланированных задач:
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.
Запланированная задача настраивается следующим образом:
powershell
-Command "Restart-Service Tomcat6"
Когда я запускаю командную строку как ДОМЕН \ 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"
сбой при запуске из запланированной задачи?
Мой 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, для запланированной задачи потребуется установить флажок для получения повышенных прав.