总结

总结

当我尝试运行任务时,在计划任务历史记录中出现以下错误:

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 服务时找到的内容。以防万一由于某种原因而看不到它。

相关内容