Get-Service: Windows-Dienste anzeigen mit PowerShell

    Programme, die als Windows-Service laufen, lassen sich traditionell über das MMC-Snap-in Dienste auflisten und verwalten. Schneller geht das oft mit PowerShell, das zu diesem Zweck eigene Cmdlets bietet. Wie gewohnt, lässt sich die Ausgabe von PowerShell-Befehlen zudem weiterverarbeiten, beispielsweise sortieren, filtern und als Input an andere Cmdlets durchreichen.

    Windows-Dienste haben im Vergleich zu normalen Prozessen einen besonderen Status, weil sie unabhängig von einer Benutzer-Session und im Kontext eigener Konten laufen können. Sie sind die Pendants zu Daemons unter Unix und starten zumeist automatisch, wenn das System hochfährt. Daher gibt es nicht nur auf der GUI eigene Tools für das Management der Dienste. Auch PowerShell hat separate Befehle für normale Prozesse und Services.

    Die einfachste Variante zu Abfrage aller installierten Windows-Dienste besteht im Aufruf von Get-Service ohne weitere Parameter. Dies ist in den meisten Fällen wenig hilfreich, weil das Cmdlet in dieser Form eine mehrseitige Liste aller Dienste ausspuckt, egal ob diese laufen oder angehalten wurden.

    Service-Liste filtern und sortieren

    Möchte man Details zu einem bestimmten Service ermitteln, dann lässt sich die Ausgabe über die Parameter -Name und DisplayName eingrenzen:

    Get-Service rpc*

    Dieser Aufruf zeigt alle Dienste an, deren Namen mit rpc beginnen (der Parameter -name ist optional und es findet keine Unterscheidung zwischen Groß- und Kleinschreibung statt). Oft kommt man besser zum Ziel, wenn man nicht in den kryptischen Namen sucht, sondern in der Beschreibung von Services:

    Get-Service -DisplayName Druck*

    Als Wert akzeptiert dieser Parameter auch Zeichenketten, die Wildcards oder Bereichsangaben enthalten, also etwa [v-z]* für alle Begriffe, die entweder mit v, w, x, y oder z beginnen.

    Nur gestartete Services anzeigen

    Ein typisches Anliegen besteht darin, dass man nur Dienste sehen möchte, die einen bestimmten Status haben:

    Get-Service | where {$_.Status -eq "running"}

    Anstatt die Services über den Status zu filtern, könnte man sie über diese Eigenschaft auch sortieren, um zu sehen, welche laufen oder welche angehalten wurden:

    Get-Service | Sort Status

    Über Powershell kann man sich zudem Eigenschaften anzeigen lassen, die auf der GUI nicht sichtbar sind, beispielsweise welche Services von einem Dienst abhängen:

    Get-Service | where {$_.Status -eq "running"} | select Name, DependentServices

    Das Cmdlet Get-Service gehört zu jenen, die Remoting unterstützen, so dass durch die Verwendung des Parameters -ComputerName auch die Dienste auf entfernten Rechnern abfragen lassen.

    Keine Kommentare