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

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

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

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

我们收到此错误:

停止服务:无法在计算机“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可以?

答案1

事实证明我没有授予足够的权限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  

我正在使用年代(查询服务状态),电视(启动服务),以及(停止服务)。 我还需要 E(枚举依赖服务)。 看起来 PowerShell cmdlet 在启动/停止时需要查看依赖服务。

这是我更新后的subinacl命令:

subinacl.exe /service MyService /GRANT=MyServiceControlUser=STOE

如果你不想下载/使用subinacl.exe,你可以通过 PowerShell模块的授予服务控制权限或者授予服务许可功能。(免责声明:我是 Carbon 项目的所有者/维护者。)

答案2

以下命令在我的 Windows Server 2008 R2 计算机上按预期工作。

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

您是否也可以尝试这个一次性命令来确定它是否有效,并且您是否已验证该用户是目标服务器上用户组的成员?

相关内容