[Kurz erwähnt] PowerShell set-service Dienst-Terminierung mit abhängigen Diensten schlägt fehl

Hallo,

zusätzlich zu meinem heutigen Beitrag bzgl. des Task Scheduler möchte ich noch auf einen anderen Fall bzgl. Powershell eingehen.

Title: PowerShell set-service Dienst-Terminierung mit abhängigen Diensten schlägt fehl

Ausgangszenario:
Ein Kunde möchte via PowerShell-Skript Dienste beenden, die jeweils von anderen Diensten abhängen. Hierzu wurde die Verwendung des CMDLET „set-service“ avisiert.

Beispiel:
WebClient, abhängig von „WebDav Client Redirector Driver“

 

Der Kunde hat hierzu das folgende Kommando verwendet:

           set-service -Name WebClient -Status Stopped

Dies resultiere in den folgenden Fehler:

PS C:\Windows\system32> set-service -Name WebClient -Status Stopped
Set-Service : Cannot stop service 'WebClient (WebClient)' because it is dependent on other services.
At line:1 char:12
+ set-service <<<< -Name WebClient -Status Stopped
    + CategoryInfo : InvalidOperation: (System.ServiceProcess.ServiceController:ServiceController) [Set-Servi
   ce], ServiceCommandException
    + FullyQualifiedErrorId : ServiceIsDependentOnNoForce,Microsoft.PowerShell.Commands.SetServiceCommand

Ergebnis:

Meine interne Analyse hat ergeben, dass das CMDLET „set-service“ in Verb. mit „–Status“ nicht mit Abhängigkeiten umgehen kann (sowohl die Abhängigkeit von anderen Dienste zu diesem, als auch die eigenen Abhängigkeiten wie in diesem Fall). Somit handelt es sich hierbei um keinen logischen Fehler oder technischen Fehler - vielmehr eine funktionale Beschränkung.

Das CMDLET in Verbindung mit dem Status-Command sollte somit nur bei Diensten verwendet werden, die keinerlei Abhängigkeiten haben (Standalone).

Besser ist jedoch die Verwendung des CMDLET „stop-service“ - dieses CMDLET kann zusätzlich zum beschrieben Beispiel auch Dienste beenden, welche eine Abhängigkeit gegenüber anderen Diensten darstellen.

Beispiel:
Service A, keine Abhängigkeit
Service B, hängt von Service A ab

Sowohl A als auch B können direkt beendet werden (A, ohne zuvor B zu beendet durch den Parameter –force)

Das CMDLET stop-service wird im folgenden Artikel beschrieben:
https://technet.microsoft.com/en-us/library/dd347576.aspx

-
Ich hoffe, dass Sie diesen Beitrag interessant finden und würde mich über Ihr Feedback freuen.

Grüße,
Matthias Meiling
Support Engineer - Platform Core