当我尝试运行任务时,在计划任务历史记录中出现以下错误:
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
- 用户:域\tomcat.restarter
- 触发器:每日凌晨 2 点启用
- 措施:启动程序:
- 程序/脚本:
powershell
- 参数:
-Command "Restart-Service Tomcat6"
- 程序/脚本:
当我启动命令提示符时域\tomcat.restarter和:
runas /user:DOMAIN\tomcat.restart cmd
然后运行:
powershell -Command "Restart-Service Tomcat6"
然后echo %errorlevel%
打印0
并重新启动 Tomcat。这表明 Tomcat6 服务上的 SDDL 足以满足目的,并且域\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 并且可以写入文件。
更新:进一步调查
我在 D:\tomcat\bin 中创建了一个 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"
从计划任务运行时会失败?
答案1
总结
我的 SDDL 不完整。我需要添加西南(EnumDeps)已经添加低碳再生能源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)
SIDS-1-1-11-1111111111-1111111111-1111111111-1111对于该组来说是正确的DOMAIN\Tomcat 重新启动程序那域\tomcat.restarter是的成员。这是正确的。授予的权限(低碳再生能源)不足以重启服务。
为了重启服务要使 Cmdlet 正常工作,它需要枚举依赖服务的权限。在 SDDL 中,这是西南(EnumDeps)在 SDDL 字符串中。我有低碳再生能源允许 QueryStat、Start 和 Stop。
对我来说,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 命令提示符,但不来自任务计划程序。
我从阅读@splattered bits 对他自己类似问题的回答中得到了必要的启示重启服务在https://serverfault.com/a/357753/57073。
答案2
该命令是否需要提升权限?即使您已完全关闭 UAC,计划任务仍需要勾选以提升权限。
答案3
我本来想将其添加为评论,但代码处理太糟糕了:
您能添加几行来获取更多信息吗?
$1 = Get-Service *tomcat*
Restart-Service $1
$1 >log.log
$error >>log.log
$error应该输出此会话中产生的所有错误信息。
$1 只会显示它在搜索 Tomcat 服务时找到的内容。以防万一由于某种原因而看不到它。