Arbeiten mit Windows-Diensten in PowerShell

Arbeiten mit Windows-Diensten in PowerShell

Veröffentlicht am August 03, 2017 0 Comments

EFT-and-cloud-survey-finding.jpg

PowerShell hilft Zeit zu sparen, indem es bestimmte Dienstverwaltungsaufgaben übernimmt. Lesen Sie hier, wie Sie solche Tools erstellen können. 

Das Stoppen, Starten und Wieder-Starten von Windows-Diensten ist eine häufige Aufgabe von vielen IT-Fachleuten. Wir alle kennen das Dienste MMC-Snapin, wo wir zu einem Dienst browsen und ihn mit einem rechten Mausklick wieder starten oder verschiedene Attribute ändern. Wenn wir zeitsparend arbeiten, greifen wir möglicherweise auf einen entfernten Computer im Dienste-Snapin zu und verwalten ihn so. Trotzdem wird es schnell mühsam auf diese Weise mit Windows-Diensten zu arbeiten.

Es ist zeitverschwendend, wenn man viele Dienste verwaltet und so in der Benutzeroberfläche herumklicken muss! Zum Glück kann man über PowerShell Tools erstellen, die diese Dienstverwaltungsaufgaben durchführen.

PowerShell bietet einige vorkonfigurierte Befehle, um mit Windows-Diensten zu arbeiten.

PS> Get-Command -Noun Service

CommandType Name            Version Source
----------- ----            ------- ------
Cmdlet      Get-Service     3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      New-Service     3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      Restart-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      Resume-Service  3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      Set-Service     3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      Start-Service   3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      Stop-Service    3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      Suspend-Service 3.1.0.0 Microsoft.PowerShell.Management

Man kann diese vorgefertigten Kommandos für alle möglichen Aufgaben benutzen, um sich das Leben einfacher zu machen. Wenn man zum Beispiel den Dienststatus von vielen verschiedenen Computern gleichzeitig vom Active Directory holen möchte. Um solch ein Tool zu erstellen, kann man das Active Directory PowerShell-Module verwenden – die Computer vom AD entfernen und diese Computer-Namen dann in den Get-ServiceBefehl eingeben.

$computers = Get-AdComputer -Filter * | Select-Object -ExpandProperty Name
get-service -ComputerName $computers -Name wuauserv | Select-Object MachineName,Name,Status

MachineName Name      Status
----------- ----      ------
DC          wuauserv Running
CLIENT1     wuauserv Running
...

Wenn man nun die Dienste auf all diesen Computer gleichzeitig wieder starten möchte, kann man die Resulte, die man gerade erhalten hat, direkt in Restart-Service eingeben.

Get-Service -ComputerName $computers -Name wuauserv | Restart-Service

Man kann diese gleiche Vorgehensweise auch zum Starten und Stoppen von Diensten verwenden. Anstatt Restart-Service zu benutzen, hätte man ebenso einfach Stop-Service oder Start-Service benutzen können.

Dienste können mit dem Set-Service Befehl auch verändert werden. Mit dem Befehl Set-Servicekann man zum Beispiel den Anzeigenamen eines Dienstes, den Starttyp oder die Beschreibung ändern. Und wieder kann man die Dienste, die man vorher über Get-Service erhalten hat, in den Befehl Set-Service eingeben, um andere Aktionen durchzuführen.

## Change the display name for all wuauserv services to 'foo'
Get-Service -ComputerName $computers -Name wuauserv | Set-Service -DisplayName 'foo'

## Change the description to 'stuff'
Get-Service -ComputerName $computers -Name wuauserv | Set-Service -Description 'stuff'

Sie sehen also, dass, solange man die Dienste mit Get-Service  abfragen kann, man sehr vieles mit diesen Diensten machen kann. Es kann jedoch nicht alles mit den eingebauten Befehlen gemacht werden. Zum Beispiel ist es nicht möglich, den Benutzernamen und das Passwort, unter denen ein Dienst läuft, mit einem Dienstbefehl zu ändern. Hierfür müsste man WMI verwenden. Um die Zugangsdaten zu ändern, müsste man den Dienst direkt von WMI holen und die .NET method verwenden, um das Dienstkonto zu verändern. Hier ist ein ausgezeichnetes Beispiel, wie man das machen kann.

## Gather the username and password
$credential = Get-Credential

## Find the service to change
$params = @{
  'Namespace' = 'root\CIMV2'
  'Class' = 'Win32_Service'
  'Filter' = "DisplayName='App Service'"
}
$service = Get-WmiObject @params

## Make the change using the username and password
$service.Change($null,
  $null,
  $null,
  $null,
  $null,
  $null,
  $credential.UserName,
  $credential.GetNetworkCredential().Password,
  $null,
  $null,
  $null
)

Auch wenn nicht alles mit den eingebauten Dienst-Cmdlets möglich ist, ist doch so gut wie alles möglich, da PowerShell auf .NET gebaut ist. Man muss nur wissen, wo man schauen muss!

Tipp: Lesen Sie dazu auch das Whitepaper Automatisieren mit PowerShell oder laden Sie sich kostenfrei eine Testversion von MOVEit Automation, Software für die Automatisierung der sicheren Dateiübertragung, herunter.

Adam Bertram

Adam Bertram is a 20-year veteran of IT. He’s currently an automation engineer, blogger, independent consultant, freelance writer, author, and trainer. Adam focuses on DevOps, system management, and automation technologies as well as various cloud platforms. He is a Microsoft Cloud and Datacenter Management MVP and efficiency nerd that enjoys teaching others a better way to leverage automation.

Kommentare

Comments are disabled in preview mode.
Themen

Sitefinity-Schulungen und -Zertifizierungen jetzt verfügbar.

Lassen Sie sich von unseren Experten beibringen, wie Sie die erstklassigen Funktionen von Sitefinity nutzen können, um überzeugende digitale Erlebnisse zu bieten.

Weitere Informationen

Abonnieren Sie, um alle Neuigkeiten, Informationen und Tutorials zu erhalten, die Sie benötigen, um bessere Business-Apps und -Websites zu erstellen

Loading animation