Wie man Dienste in PowerShell verwaltet
- Dienste in PowerShell auflisten
- Entfernte Dienste in PowerShell finden
- Dienste in PowerShell starten und stoppen
- Dienst in PowerShell neu starten
- Den Starttyp eines Dienstes in PowerShell ändern

Windows-Dienste sind eines der Themen, die nahezu jeder Windows-Systemadministrator nutzen muss. Natürlich könnten wir zur Verwaltung von Windows-Diensten das services.msc
MMC-Snap-In für einmalige Aufgaben starten, aber was ist, wenn wir Automation mit PowerShell aufbauen müssen?
In diesem Artikel werden alle PowerShell-Service-Cmdlets besprochen, wie man sie verwendet und wie wir unser Skript entwickeln, um Dienste auf vielen Computern lokal oder remote zu verwalten.
Dienste in PowerShell auflisten
Eine der grundlegendsten Aufgaben, die wir mit Windows PowerShell und Diensten erledigen können, ist einfach die Aufzählung der Dienste, die auf einem lokalen oder einem entfernten Computer vorhanden sind. Zum Beispiel, öffnen Sie PowerShell, führen Sie den Befehl Get-Service
aus und beobachten Sie die Ausgabe.
Der Befehl Get-Service
listet allein alle Dienste auf dem lokalen Computer sowie den Status
, den Name
und DisplayName
jedes Dienstes auf.
Get-Service
Ausgabe:
Status Name DisplayName
------ ---- -----------
Stopped AarSvc_55244 AarSvc_55244
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Running AMD Crash Defen... AMD Crash Defender Service
<SNIP>
Wie viele andere Cmdlets gibt PowerShell nicht alle Eigenschaften für jeden Dienst zurück.
Falls wir zum Beispiel einen erforderlichen Dienst oder vielleicht die Dienstbeschreibung sehen möchten, können wir diese Eigenschaften finden, indem wir das Ergebnis an den Befehl Select-Object
pipen und das *
-Wildcard verwenden, um alle Eigenschaften darzustellen.
Get-Service ALG | select *
Ausgabe:
Name : ALG
RequiredServices : {}
CanPauseAndContinue : False
CanShutdown : False
CanStop : False
DisplayName : Application Layer Gateway Service
DependentServices : {}
MachineName : .
ServiceName : ALG
ServicesDependedOn : {}
ServiceHandle :
Status : Stopped
ServiceType : Win32OwnProcess
StartType : Manual
Site :
Container :
Entfernte Dienste in PowerShell finden
Vielleicht sind wir in einem Netzwerk und müssen Dienste auf einem oder mehreren entfernten Windows-Computern auflisten. Wir hätten dies in den Tagen von Windows PowerShell mit dem Parameter -ComputerName
tun können, aber leider existiert dieser Parameter nicht mehr.
Eine Möglichkeit, Windows-Dienste auf einem entfernten Computer zu inspizieren, ist die Verwendung von Windows PowerShell Remoting (oder PS Remoting). Mit PS Remoting können wir jeden lokalen Befehl kapseln und ihn in einer entfernten Sitzung aufrufen, genau wie wir es lokal machen würden.
Angenommen, wir haben PowerShell Remoting auf einem entfernten Computer aktiviert, könnten wir zum Beispiel das Cmdlet Invoke-Command
verwenden, um den Befehl Get-Service
auf einem entfernten Computer auszuführen.
$cred = Get-Credential
Invoke-Command -ComputerName SRV1 -ScriptBlock { Get-Service } -Credential $cred
Ausgabe:
Status Name DisplayName PSComputerName
------ ---- ----------- --------------
Stopped AarSvc_55244 AarSvc_55244 SRV1
<SNIP>
Nach der Ausführung gibt das Cmdlet Invoke-Command
alle Informationen weiter, die Get-Service
zurückgegeben hat, und die Dienste werden wie erwartet an Sie zurückgegeben.
Beachten Sie die zusätzliche PSComputerName
-Eigenschaft, die vom Cmdlet Invoke-Command
zurückgegeben wird. Wir können auch ein einfaches Skript erstellen, um Dienste auf vielen entfernten Computern aufzulisten.
Dienste in PowerShell starten und stoppen
Wir können auch Dienste mit Windows PowerShell starten und stoppen.
Die Cmdlets Start-Service
und Stop-Service
tun genau das, was wir erwarten würden. Als nächstes können wir die Pipeline oder den -Name
-Parameter unten verwenden.
## Stop a service
$serviceName = 'wuauserv'
Stop-Service -Name $serviceName
## Stop a service with the pipeline
Get-Service $wuauserv | Stop-Service
Alle *-Service
-Cmdlets ermöglichen es uns, die Dienstnamenwerte mit den Parametern -Name
und -DisplayName
vollständig auszufüllen. Geben Sie einfach den Parameter -Name
gefolgt von einem Leerzeichen ein und drücken Sie die Tab
-Taste.
Wir werden sehen, dass es durch alle Dienste auf dem lokalen Computer durchläuft. Dasselbe Konzept gilt auch für das Starten von Diensten.
## Start a service
$serviceName = 'wuauserv'
Start-Service -Name $serviceName
## Start service with the pipeline
Get-Service $wuauserv | Start-Service
Sowohl die Befehle Start-Service
als auch Stop-Service
sind idempotent, was bedeutet, dass wenn ein Dienst entweder gestartet oder gestoppt ist und wir versuchen, den Dienst zu stoppen oder zu starten, wenn er sich bereits in diesem Zustand befindet, die Cmdlets den Dienst überspringen werden.
Um entfernte Dienste mit PowerShell zu stoppen und zu starten, müssen Sie diese Befehle erneut in einen Skriptblock einfügen und PowerShell Remoting verwenden, um sie remote aufzurufen, wie unten gezeigt.
$cred = Get-Credential
$serviceName = 'wuauserv'
Invoke-Command -ComputerName SRV02 -ScriptBlock { Start-Service -Name $using:serviceName } -Credential $cred
Dienst in PowerShell neu starten
Um den Codewiederverwendungsaufwand zu begrenzen, um einen Dienst mit Windows PowerShell neu zu starten, sollten wir besser das Cmdlet Restart-Service
verwenden. Dieses Cmdlet tut genau das, was wir denken, und funktioniert ähnlich wie die anderen Dienstbefehle.
Wenn wir beispielsweise den Dienst wuauserv
wie im vorherigen Beispiel oben starten und stoppen möchten, könnten wir etwas Code einsparen, indem wir die Ausgabe von Get-Service
direkt an Restart-Service
pipen, wie unten gezeigt.
## Restart a service with the Name parameter
$serviceName = 'wuauserv'
Get-Service -Name $serviceName | Restart-Service
Den Starttyp eines Dienstes in PowerShell ändern
Der Starttyp eines Dienstes ist das Attribut, das bestimmt, was die Dienste tun, wenn Windows hochfährt. Also haben wir wieder einige Optionen.
Automatisch
: Der Dienst beginnt automatisch, wenn Windows hochfährt.Deaktiviert
: Der Dienst wird niemals gestartet, es sei denn, er wird geändert.Manuell
: Der Dienst kann gestartet werden, muss aber manuell vorgenommen werden.Automatisch – Verzögert
: Der Dienst startet automatisch, wird jedoch verzögert, sobald Windows bootet.
Zuerst müssen wir wissen, was ein Starttyp ist. Sie können dies mit Get-Service
herausfinden.
Wenn Sie Get-Service
verwenden, um den Starttyp zu finden, werden Sie feststellen, dass Get-Service
ihn Status
nennt und als Eigenschaft Status
dargestellt wird.
(Get-Service -Name wuauserv | select *).StartType
Ausgabe:
Manual
Sobald Sie den aktuellen Starttyp kennen, können wir ihn mit Set-Service
ändern. Das folgende Beispiel legt den Starttyp auf Automatisch
fest.
Set-Service -Name <service name> -StartupType Automatic
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn