Windows System-Dienste mit Powershell abfragen


Wo man seither zu SC.EXE griff um Dienste unter Windows zu untersuchen oder zu bearbeiten, hilft einem nun Powershell weiter. Gerade wenn man bestimmte Abfragen starten möchte ist Powershell die bei weitem bessere Wahl.

Generelle Auflistung der Dienste:

Get-Service

Wenn man sich nur für einen Dienst interessiert, kann man

Get-Service spooler

verwenden. Dazu funktioniert alternativ auch:

Get-Service Druckwarteschlange

Von einem Dienst abhängige Dienste bekommt man über

Get-Service spooler –DependentServices

Bevor man Piping benutzt um bestimmte Dienste zu filtern kann man auch einfach den Parameter –Include verwenden. Folgende Anweisung stellt z.B. Dienste dar die SPO enthalten:

Get-Service –Include "SPO*"

was dem Befehl

Get-Service "SPO*"

entspricht.

Auf die gleiche Weise kann man mittels –DisplayName auch nach dem Anzeigenamen suchen:

Get-Service –DisplayName "*druck*"

Um zu sehen welche Properties oder Methoden zur Verfügung stehen, verwendet man einfach

Get-Service | Get-Member

Wenn man nun wissen möchte welche Dienste aktuell laufen, verwendet man

Get-Service | Where-Object {$_.Status –eq "Running"}

Um laufende Dienste zu ermitteln, welche einen bestimmten Anzeigenamen haben, verwendet man

Get-Service | Where-Object {$_.Status –eq "Running"} | Where-Object {$_.DisplayName –like "*Blue*"}

womit z. B. laufende Bluetoothdienste angezeigt werden.

Zusätzliche Infos bekommt man dann wieder über Format-Table

Get-Service | Where-Object {$_.Status –eq "Running"} | Where-Object {$_.DisplayName –like "*Blue*"} | Format-Table Name, CanShutdown, ServiceType

Übrigens lässt sich Get-Service auch mittels Alias gsv abkürzen.

Leider gibt es einige Dinge die noch nicht optimal gelöst sind. Z. B. gibt es momentan keine Möglichkeit den StartMode einfach zu ermittlen, statt dessen muss man zu folgendem Trick greifen:

Get-WmiObject –Class Win32_Service –Property StartMode –Filter "Name=’spooler’"

Wer es einfacher haben möchte, kann hier für die Änderung voten: https://connect.microsoft.com/PowerShell/feedback/details/424948/i-would-like-to-see-the-property-starttype-added-to-get-services

Wenn man Dienste sehen möchte, die keine Abhängigkeiten haben, verwendet man:

Get-Service | Where-Object {!$_.ServicesDependedOn}

um einen Überblick über Dienste und Ihre Abhängigkeiten zu bekommen, kann man

Get-Service | Where-Object {$_.ServicesDependedOn} | Format-Table Name, ServicesDependedOn

verwenden.

Wenn man wissen möchte, welche Dienste von einem bestimmten anderen Dienst abhängen kann folgendes verwenden:

Get-Service | Where-Object {$_.ServicesDependedOn | Where-Object {$_.Name –match "rpc"}} | Format-Table Name, ServicesDependedOn

Damit werden alle Dienste die von einem RPC Dienst abhängen ausgegeben.

Technet zu Get-Service: http://technet.microsoft.com/en-us/library/dd347591.aspx

Weitere Interessante Links: Reihenfolge in der Dienste gestartet wurden ermitteln, mittels win32_LoadOrderGroupServiceMembers und WMI: http://blogs.technet.com/b/heyscriptingguy/archive/2010/09/02/using-windows-powershell-to-determine-service-launch-order.aspx

8 Antworten to “Windows System-Dienste mit Powershell abfragen”

  1. Windows Treiber per Powershell Abfragen « Das nie endende Chaos! Says:

    […] Das nie endende Chaos! Aber doch der Versuch etwas Ordnung reinzubringen. « Windows System-Dienste mit Powershell abfragen […]

  2. Quirel Says:

    Um mehr Infos über einen Dienst per WMI zu erhalten kann man folgende Zeile verwenden:

    gwmi –Class Win32_Service –Filter „Name=’spooler’“ | fl *

    Damit wird z. B. PathName angezeigt, womit man das zugehörige Image näher betrachten kann.

  3. mario Says:

    Guten Abend,
    ich habe nichts gefunden, wo cih ein Dienst, als bestimmten User starten kann. Gibt es da was und wie würde das lauten?

  4. Buerger3 Says:

    Unter :“Zusätzliche Infos bekommt man dann wieder…“ ist ein Fehler im Befehl. Es müsste hier lauten „Format-Table“ und nicht „Form-Table“

    LG
    Buerger3

  5. Floo Xeno Says:

    Hallo zusammen,

    und wie bekomme ich nur den DisplayName der jeweiligen Dienste in ein Label dargestellt?

    $OLASERVICECHECK = New-Object System.Windows.Forms.Label
    $OLASERVICECHECK.Size = New-Object System.Drawing.Size(500,150)
    $OLASERVICECHECK.Location = New-Object System.Drawing.Size(10,250)
    $OLASERVICECHECK.Text = $Service
    $TABOLASettings.Controls.Add($OLASERVICECHECK)

    Wen man vorher die Variable $Service gefüllt mit
    Get-Service O*
    hat, erhält man folgende Ergebnisse:
    System.ServiceProcess.ServiceController
    System.ServiceProcess.ServiceController
    System.ServiceProcess.ServiceController

    Danke
    Floo

  6. Quirel Says:

    Mittels

    $Service | select -ExpandProperty DisplayName

    bekommst Du die Namen der Dienste, allerdings werden dies mehrere sein und Du bekommst ein Array von Strings zurück, Du solltest also einen langen String aus den Arrayelementen basteln oder vielleicht eine Listbox anstatt Label zur Ausgabe verwenden.

    • Floo Xeno Says:

      Hallo,

      ja genial, das reicht mir schon, denn die soll nur anspringen wenn zwei bestimmte Dienste vorhanden sind.

      Dafür reicht das Label vollkommen aus

      Vielen herzlichen Dank
      Floo

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s


%d Bloggern gefällt das: