如何授予使用Powershell远程启动/停止服务的权限?


10

我们有一个PowerShell脚本,可以在另一台计算机上重新启动服务。当我们使用PowerShell的内置服务控件cmdlet时,如下所示:

$svc = Get-Service -Name MyService -ComputerName myservicehostname
Stop-Service -InputObject $svc
Start-Service -InputObject $svc

我们得到这个错误:

Stop-Service:无法在计算机“ myservicehostname”上打开MyService服务。

但是,当我们使用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可以停止我的服务?

Answers:


20

原来我没有给足够的权限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-ServiceControlPermissionGrant-ServicePermission函数使用PowerShell 。(免责声明:我是Carbon项目的所有者/维护者。)


请将此标记为正确答案。对于相同的问题,这对我来说是一个巨大的帮助:)
Alain O'Dea

我从没听说subinacl过。多么有用的工具!感谢您回来将这些信息留给我们其他人。

在Windows 2016服务器的非域环境中可以很好地控制远程计算机上的服务。
Doug Knudsen '18年

0

以下命令在Windows Server 2008 R2计算机上可以正常工作。

Start-Service -InputObject $(Get-Service -Computer [ComputerName] -Name spooler)  

您是否也可以尝试使用一次命令确定是否可行,并且您是否已验证用户是目标服务器上“用户”组成员的组成员?


你的ipped窃对我不起作用。由于安全性要求,我无法使该用户成为Users组(或任何内置Windows组)的成员。
喷溅的位
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.