Powershell

如何使用 Powershell 授予遠端啟動/停止服務的權限?

  • June 4, 2013

我們有一個 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可以?

事實證明我沒有給予足夠的權限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 項目的所有者/維護者。)

引用自:https://serverfault.com/questions/357424