Get-Process, Stop-Process: Prozesse anzeigen und beenden in PowerShell

    Kostenlose Studie: Was verdienen IT-Experten wirklich? Gliederung der Gehälter nach Berufserfahrung, Position und Funktion. Jetzt herunterladen »

    (Anzeige)

    Um aktive Prozesse anzuzeigen und nicht mehr reagierende Programme zu beenden, hat sich unter Windows der Task-Manager als das bevorzugte Tool etabliert. Die PowerShell ist für diese Aufgaben jedoch in vielen Fällen flexibler und effizienter. Zuständig sind dafür die Cmdlets Get-Process und Stop-Process.

    Folgt man der Empfehlung von Microsoft, die PowerShell zum zentralen Management-Werkzeug für Windows zu machen, dann bedarf es für viele Aufgaben keiner externen Tools wie den Task-Manager. Vielmehr kann man aus der stets präsenten Kommandozeile ohne Umwege die gewünschten Ausgaben erledigen.

    Vorteile gegenüber GUI-Tools

    Das gilt auch für die Verwaltung von aktiven Prozessen, bei der die PowerShell wesentlich mehr Möglichkeiten bietet, diese zu filtern, zu sortieren oder in einem Schwung zu beenden als ein GUI-Werkzeug. Außerdem lassen die Aktionen über den Parameter -ComputerName auch auf (mehreren) entfernten PCs ausführen.

    Für die Anzeige von Prozessen ist das Cmdlet Get-Process zuständig. In der einfachsten Form listet ein Aufruf ohne Argumente alle aktiven Prozesse auf. Die standardmäßig angezeigten Eigenschaften weichen von jenen ab, die der Task-Manager per Voreinstellung präsentiert. Sie lassen sich aber beliebig austauschen. So würde

    Get-Process | select name, ID, CPU, Description

    einen ähnlichen Output erzeugen wie der Task-Manager. Zur Auswahl stehen indes weit mehr Eigenschaften von Prozessen. Einen Überblick verschafft man sich mit

    Get-Process | Get-Member -MemberType Property

    oder in der Kurzform unter Verwendung von Aliases mit

    ps | gm -Mem property

    Prozesse filtern und sortieren

    Mit Get-Process ist es sehr einfach, aus der Liste aller Prozesse jene auszufiltern, die zu einem bestimmten Programm gehören. Dazu verwendet man den Parameter -name, der auch Platzhalter akzeptiert und dessen Name nicht zwingend angegeben werden muss:

    Get-Process iexpl*

    zeigt alle Prozesse für den Internet Explorer an. Wenn man möchte, kann man getrennt durch Kommata mehrere Namen in einem Aufruf angeben. Will man die Prozesse nach CPU-Auslastung sortieren und die größten Verbraucher oben in der Liste anzeigen, dann gibt man

    Get-Process | sort -Descending CPU

    ein.

    Prozesse beenden über kill-Methode oder Stop-Process

    Da Process-Objekte in PowerShell über mehrere Methoden verfügen, darunter auch über kill(), kann man im Zuge von Get-Process bestimmte Prozesse auch gleich beenden. Zu diesem Zweck iteriert man mit foreach über alle Objekte und ruft für jedes die kill()-Methode auf:

    Get-Process iexplo*| foreach {$_.kill()}

    Als Alternative, die weniger Tipparbeit erfordert, steht Stop-Process zur Verfügung. Im obigen Beispiel würde man die Ausgabe von Get-Process nicht über die Pipe an ein foreach-Objekt, sondern an das Cmdlet Stop-Process (Alias: kill) übergeben:

    Get-Process iexplo*| Stop-Process

    Es ist natürlich auch möglich, Stop-Process die Namen oder IDs der Prozesse direkt zu übergeben, so dass der vorausgehende Aufruf von Get-Process entfallen kann:

    Stop-Process -name iexplo*

    Klar dürfte sein, dass diese Art, Programme zu beenden, nur dann angebracht ist, wenn sie sich aufgehängt haben und nicht regulär geschlossen werden können. Ein kill gibt dem Benutzer keine Möglichkeit, seine Daten vor dem Schießen der Applikation zu speichern.

    Keine Kommentare