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