我们有一个Power
Shell脚本,可以在另一台计算机上重新启动服务.当我们使用PowerShell的内置服务控件cmdlet时,如下所示:
$svc = Get-Service -Name MyService -ComputerName myservicehostname Stop-Service -InputObject $svc Start-Service -InputObject $svc
我们收到此错误:
Stop-Service : Cannot open MyService service on computer ‘myservicehostname’.
但是,当我们使用sc.exe时,如下所示:
C:\Windows\System32\sc \\myservicehostname stop MyService C:\Windows\System32\sc \\myservicehostname start MyService
开始和停止成功.
执行重新启动的用户不是管理员.我们使用subinacl授予用户启动/停止和查询服务的权限:
subinacl.exe /service MyService /GRANT=MyServiceControlUser=STO
为什么PowerShell无法阻止我的服务,但sc.exe可以吗?
事实证明我没有给subinacl足够的权限.授权操作的可能访问值为:
F : Full Control R : Generic Read W : Generic Write X : Generic eXecute or any following values L : Read controL Q : Query Service Configuration S : Query Service Status E : Enumerate Dependent Services C : Service Change Configuration T : Start Service O : Stop Service P : Pause/Continue Service I : Interrogate Service U : Service User-Defined Control Commands
我正在使用S(查询服务状态),T(启动服务)和O(停止服务).我还需要E(枚举从属服务). PowerShell cmdlet似乎需要在启动/停止时查看相关服务.
这是我更新的subinacl命令:
subinacl.exe /service MyService /GRANT=MyServiceControlUser=STOE
如果您不想下载/使用subinacl.exe,可以通过Carbon模块的Grant-ServiceControlPermission或Grant-ServicePermission功能使用PowerShell. (免责声明:我是Carbon项目的所有者/维护者.)