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.