当我尝试运行一个任务时,我在计划任务历史logging中出现以下错误:
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.
计划的任务configuration如下:
powershell -Command "Restart-Service Tomcat6" 当我用DOMAIN \ tomcat.restarter启动命令提示符时:
runas /user:DOMAIN\tomcat.restart cmd
并运行:
powershell -Command "Restart-Service Tomcat6"
然后echo %errorlevel%打印0 ,Tomcat重新启动。 这表明Tomcat6服务上的SDDL足以达到目的,并且DOMAIN \ tomcat.restarter可以重新启动它。
如果我将计划的任务参数更改为-Command "'hello world'" > '%TEMP%\Temp.log'我在任务历史logging中得到return code 0 ,并且在C:\Users\tomcat.restarter\AppData\Local\Temp\Temp.log 。 这表明作为批处理作业login用户权限是有效的DOMAIN \ tomcat.restarter ,它可以运行Powershell,它可以写入文件。
我在D:\ tomcat \ bin中创build了一个restart.bat,并将程序/脚本设置为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是不完整的。 我需要将SW (EnumDeps)添加到SDDL中已经添加的LCRPWP权限中。
这是我的(破碎的)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 S-1-1-11-1111111111-1111111111-1111111111-1111对DOMAIN \ tomcat.restarter所属的组DOMAIN \ Tomcat Restarters是正确的。 那是对的。 授予的权限( LCRPWP )不足以用于重新启动服务 。
要使重新启动服务 Cmdlet能够正常工作,需要枚举依赖服务。 在SDDL中,这是SDDLstring中的SW (EnumDeps)。 我有LCRPWP允许QueryStat,启动和停止。
对于我来说,Tomcat 6正确的SDDL是:
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命令提示符运行Restart-Service ,但不能从Task Scheduler运行。
我从阅读@splattered位获得必要的启示回答他自己类似的问题与重新启动服务在https://serverfault.com/a/357753/57073 。
命令是否需要提升? 即使您将UAC完全closures,计划的任务也需要具有提升特权的checkbox。
我要添加这个作为评论,但代码处理是可怕的:
你可以添加几行来获取更多信息吗?
$1 = Get-Service *tomcat* Restart-Service $1 $1 >log.log $error >>log.log
$ error应该输出在这个会话中生成的所有错误信息。
$ 1只会显示它searchTomcat服务时发现的内容。 以防万一因为什么原因无法看到它。