Verwalten von Diensten

Dieses Beispiel gilt nur für Windows PowerShell 5.1.

Es gibt acht dienstbezogene Kern-Cmdlets (Service-Cmdlets), die für eine Vielzahl von Dienstaufgaben konzipiert sind. In diesem Artikel wird nur das Auflisten und Ändern des Ausführungszustands von Diensten behandelt. Mit Get-Command *-Service können Sie eine Liste der Service-Cmdlets abrufen. Informationen zu den einzelnen Cmdlets finden Sie mithilfe von Get-Help <Cmdlet-Name>, z. B. Get-Help New-Service.

Abrufen von Diensten

Sie können die Dienste auf einem lokalen oder Remotecomputer abrufen, indem Sie das Cmdlet Get-Service verwenden. Wie bei Get-Process werden bei der Verwendung des Get-Service-Befehls ohne Parameter alle Dienste zurückgegeben. Sie können nach Name filtern, und Sie können sogar ein Sternchen als Platzhalterzeichen verwenden:

PS> Get-Service -Name se*

Status   Name               DisplayName
------   ----               -----------
Running  seclogon           Secondary Logon
Running  SENS               System Event Notification
Stopped  ServiceLayer       ServiceLayer

Da nicht immer offensichtlich ist, welcher Name der echte Name für einen Dienst ist, möchten Sie möglicherweise über den Anzeigenamen nach Diensten suchen. Dazu können Sie nach einem bestimmten Namen, mit Platzhaltern oder mit einer Liste von Anzeigenamen suchen:

PS> Get-Service -DisplayName se*

Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Running  SamSs              Security Accounts Manager
Running  seclogon           Secondary Logon
Stopped  ServiceLayer       ServiceLayer
Running  wscsvc             Security Center

PS> Get-Service -DisplayName ServiceLayer, Server

Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Stopped  ServiceLayer       ServiceLayer

Abrufen von Remotediensten

Mit Windows PowerShell können Sie den Parameter ComputerName des Cmdlets Get-Service verwenden, um die Dienste auf Remotecomputern abzurufen. Der Parameter ComputerName akzeptiert mehrere Werte sowie Platzhalterzeichen, sodass Sie die Dienste auf mehreren Computern mit einem einzelnen Befehl abrufen können. Beispielsweise ruft der folgende Befehl die Dienste auf dem Remotecomputer „Server01“ ab.

Get-Service -ComputerName Server01

Ab PowerShell 6.0 verfügen die *-Service-Cmdlets nicht mehr über den ComputerName-Parameter. Mithilfe von PowerShell-Remoting können Sie aber trotzdem noch Dienste auf Remotecomputern abrufen. Beispielsweise ruft der folgende Befehl die Dienste auf dem Remotecomputer „Server02“ ab.

Invoke-Command -ComputerName Server02 -ScriptBlock { Get-Service }

Ferner können Sie mit den anderen *-Service-Cmdlets Dienste verwalten. Weitere Informationen zu PowerShell-Remoting finden Sie unter about_Remote.

Abrufen von erforderlichen und abhängigen Diensten

Das „Get-Service“-Cmdlet hat zwei Parameter, die bei der Verwaltung von Diensten sehr hilfreich sind. Der „DependentServices“-Parameter bewirkt, dass Dienste abgerufen werden, die vom angegebenen Dienst abhängen.

Der RequiredServices-Parameter bewirkt, dass Dienste abgerufen werden, von denen der Dienst LanmanWorkstation abhängt.

PS> Get-Service -Name LanmanWorkstation -RequiredServices

Status   Name               DisplayName
------   ----               -----------
Running  MRxSmb20           SMB 2.0 MiniRedirector
Running  bowser             Bowser
Running  MRxSmb10           SMB 1.x MiniRedirector
Running  NSI                Network Store Interface Service

Der DependentServices-Parameter bewirkt, dass Dienste abgerufen werden, von denen der Dienst LanmanWorkstation abhängt.

PS> Get-Service -Name LanmanWorkstation -DependentServices

Status   Name               DisplayName
------   ----               -----------
Running  SessionEnv         Terminal Services Configuration
Running  Netlogon           Netlogon
Stopped  Browser            Computer Browser
Running  BITS               Background Intelligent Transfer Ser...

Der folgende Befehl ruft alle Dienste ab, die über Abhängigkeiten verfügen. Das Cmdlet Format-Table wird verwendet, um für die Dienste die Eigenschaften Status, Name, RequiredServices und DependentServices anzuzeigen.

Get-Service -Name * | Where-Object {$_.RequiredServices -or $_.DependentServices} |
  Format-Table -Property Status, Name, RequiredServices, DependentServices -auto

Beenden, Starten, Anhalten und Neustarten von Diensten

Die „Service“-Cmdlets die alle haben dieselbe allgemeine Form. Dienste können als allgemeine Namen oder Anzeigenamen angegeben werden, und es können Listen sowie Platzhalter als Werte angegeben werden. Um den Druckspooler zu beenden, verwenden Sie folgenden Befehl:

Stop-Service -Name spooler

Um den Druckspooler zu starten, nachdem er beendet wurde, verwenden Sie folgenden Befehl:

Start-Service -Name spooler

Um den Druckspooler anzuhalten, verwenden Sie folgenden Befehl:

Suspend-Service -Name spooler

Das Cmdlet Restart-Service funktioniert in gleicher Weise wie die anderen Service-Cmdlets:

PS> Restart-Service -Name spooler

WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
PS>

Beachten Sie, dass eine wiederholte Warnmeldung zum Startvorgang des Druckspoolers angezeigt wird. Wenn Sie einen Dienstvorgang ausführen, der einige Zeit dauert, werden Sie von PowerShell benachrichtigt, dass weiterhin versucht wird, die Aufgabe auszuführen.

Wenn Sie mehrere Dienste neu starten möchten, können Sie eine Liste der Dienste abrufen, diese Liste filtern und dann den Neustart ausführen:

PS> Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service

WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
Restart-Service : can't stop service 'Logical Disk Manager (dmserver)' because
 it has dependent services. It can only be stopped if the Force flag is set.
At line:1 char:57
+ Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service <<<<
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...

Diese Service-Cmdlets haben keinen ComputerName-Parameter, Sie können sie aber auf einem Remotecomputer ausführen, indem Sie das Cmdlet Invoke-Command verwenden. Beispielsweise startet der folgende Befehl den „Spooler“-Dienst auf dem Remotecomputer „Server01“ neu.

Invoke-Command -ComputerName Server01 {Restart-Service Spooler}

Festlegen von Diensteigenschaften

Das Cmdlet „Set-Service“ ändert die Eigenschaften eines Diensts auf einem lokalen Computer oder Remotecomputer. Weil der Dienststatus eine Eigenschaft ist, können Sie dieses Cmdlet verwenden, um einen Dienst zu starten, zu beenden und anzuhalten. Das Cmdlet „Set-Service“ hat außerdem einen „StartupType“-Parameter, über den Sie den Starttyp des Diensts ändern können.

Wenn Sie Set-Service unter Windows Vista und höheren Versionen von Windows verwenden möchten, öffnen Sie PowerShell mit der Option Als Administrator ausführen.

Weitere Informationen hierzu finden Sie unter Set-Service.

Siehe auch