Tags: PowerShell, Troubleshooting
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.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Welche lokalen Gruppenrichtlinien sind auf dem Rechner aktiviert?
- Resolve-DnsName: nslookup für PowerShell
- Windows-Sicherheit öffnet sich nicht: Store-App mit PowerShell zurücksetzen
- Updates in WSUS importieren mit Internet Explorer oder PowerShell
- WSUS-Speicherplatz zurückgewinnen: Alte und ersetzte Updates löschen
Weitere Links