Wie man Dienste in PowerShell verwaltet

  1. Dienste in PowerShell auflisten
  2. Entfernte Dienste in PowerShell finden
  3. Dienste in PowerShell starten und stoppen
  4. Dienst in PowerShell neu starten
  5. Den Starttyp eines Dienstes in PowerShell ändern
Wie man Dienste in PowerShell verwaltet

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
Genießen Sie unsere Tutorials? Abonnieren Sie DelftStack auf YouTube, um uns bei der Erstellung weiterer hochwertiger Videoanleitungen zu unterstützen. Abonnieren
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Verwandter Artikel - PowerShell Service