Come posso concedere le autorizzazioni per avviare / interrompere in remoto un servizio utilizzando Powershell?


10

Abbiamo uno script PowerShell che riavvia un servizio su un altro computer. Quando utilizziamo i cmdlet di controllo del servizio integrati di PowerShell, in questo modo:

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

Riceviamo questo errore:

Stop-Service: impossibile aprire il servizio MyService sul computer "myservicehostname".

Tuttavia, quando usiamo sc.exe, in questo modo:

C:\Windows\System32\sc \\myservicehostname stop MyService
C:\Windows\System32\sc \\myservicehostname start MyService

l'inizio e l'arresto hanno esito positivo.

L'utente che esegue il riavvio non è un amministratore. Usiamo subinacl per concedere all'utente le autorizzazioni per avviare / arrestare e interrogare il servizio:

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

Come mai PowerShell non può interrompere il mio servizio ma sc.exepuò?

Risposte:


20

Si scopre che non stavo dando abbastanza autorizzazioni consubinacl . I possibili valori di accesso per l'azione di concessione sono:

    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  

Stavo usando S (Query Service Status), T (Start Service) e O (Stop Service). Avevo anche bisogno di E (Enumerate Dependent Services). Sembra che i cmdlet di PowerShell debbano esaminare i servizi dipendenti all'avvio / arresto.

Ecco il mio subinaclcomando aggiornato :

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

Se non si desidera scaricare / utilizzare subinacl.exe, è possibile utilizzare PowerShell tramite le funzioni Grant-ServiceControlPermission o Grant-ServicePermission del modulo Carbon . (NOTA BENE: sono il proprietario / manutentore del progetto Carbon.)


Si prega di contrassegnare questa come risposta corretta. Questo mi è stato di grande aiuto per lo stesso identico problema :)
Alain O'Dea,

Non ne ho mai sentito parlare subinaclprima. Che utilità utile! Grazie per essere tornato a lasciare queste informazioni per il resto di noi.
Dan,

Funziona perfettamente in un ambiente non di dominio con i server Windows 2016 per controllare i servizi su computer remoti.
Doug Knudsen,

0

Il comando seguente funziona come previsto sul mio computer Windows Server 2008 R2.

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

Puoi anche provare questo comando una tantum per determinare se funziona, e hai verificato che l'utente è un membro di un gruppo che è membro del gruppo Users sui server di destinazione?


Il tuo frammento non funziona per me. Per motivi di sicurezza, non posso rendere l'utente un membro del gruppo Users (o di qualsiasi gruppo Windows incorporato).
frammenti schizzati
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.