Website-Suche

Verwalten von Windows-Prozessen mit PowerShell


PowerShell verfügt über viele Funktionen zum Verwalten von Prozessen auf einem lokalen oder Remote-Computer. Mit PowerShell können Sie eine Liste laufender Prozesse abrufen, einen hängengebliebenen Prozess anhalten, einen Prozess anhand des Windows-Titels finden, einen neuen Prozess im versteckten oder interaktiven Modus ausführen usw.

Sie können die Liste der verfügbaren Prozessverwaltungs-Cmdlets in Windows 10 wie folgt anzeigen:

Get-Command -Noun Process

  • Get-Process - eine Liste der laufenden Windows-Prozesse abrufen;

  • Start-Prozess - einen Prozess/ein Programm starten;

  • Stop-Process - den Prozess gewaltsam stoppen (abbrechen);

  • Debug-Process - einen Prozess debuggen;

  • Wait-Process - warten Sie, bis der Prozess beendet ist.

Get-Process: Abrufen einer Liste laufender Prozesse

Das Cmdlet „Get-Process“ zeigt eine Liste der Prozesse an, die auf einem lokalen Computer ausgeführt werden.

Standardmäßig werden diese Eigenschaften laufender Prozesse angezeigt:

  • Handles - die Anzahl der von diesem Prozess geöffneten Eingabe-Ausgabe-Dateideskriptoren (Handles);

  • NPM(K) - ist ein nicht ausgelagerter Speicher (nicht ausgelagerter Pool). Dies ist die Größe der Prozessdaten (in KB), die niemals auf der Festplatte ausgelagert werden;

  • PM(K) - die Größe des Prozessspeichers, der ausgelagert werden kann;

  • WS(K) - die Größe des physischen Speichers (in KB), der vom Prozess verwendet wird (Arbeitssatz);

  • CPU(s) - eine vom Prozess genutzte CPU-Zeit (die Zeit auf allen CPUs wird gezählt);

  • ID - eindeutige Prozesskennung;

  • SI (Sitzungs-ID) - ist die Sitzungs-ID des Prozesses (0 bedeutet, dass er für alle Sitzungen ausgeführt wird, 1 - läuft für den ersten angemeldeten Benutzer, 2 - läuft für den zweiten angemeldeten Benutzer usw.);

  • Prozessname

So listen Sie alle Eigenschaften mehrerer Prozesse auf:

Get-Process cmd,excel,notep* | Format-List *

Sie können nur die spezifischen Prozesseigenschaften anzeigen, beispielsweise einen Namen (

ProcessName

), eine Startzeit (

StartTime

), ein Prozessfenstertitel (

MainWindowTitle

), ein ausführbarer Dateiname (

Path

) und einen Entwicklernamen (

Company

):

Get-Process winword, notep* | Select-Object ProcessName, StartTime, MainWindowTitle, Path, Company|ft

So zeigen Sie eine Liste laufender Benutzerprozesse mit GUI an (Hintergrund- und Systemprozesse werden nicht angezeigt):

Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle

Mit der Option IncludeUserName können Sie einen Benutzernamen (Eigentümer) anzeigen, der den Prozess gestartet hat:

Get-Process -Name winword -IncludeUserName

Benutzen

Where-Object

können Sie Prozesse nach bestimmten Kriterien auswählen. Lassen Sie uns zum Beispiel alle Prozesse anzeigen, die mehr als 300 MB RAM verbrauchen, sie in absteigender Reihenfolge nach der Speichernutzung sortieren und die Speichergröße in MB statt in KB anzeigen:

Get-Process| where-object {$_.WorkingSet -GT 300000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" -Descending

Wie bereits erwähnt, enthält das Cmdlet „Get-Process“ im CPU-Parameter die vom jeweiligen Prozess genutzte Prozessorzeit in Sekunden. Um den Prozentsatz der von Prozessen genutzten CPU anzuzeigen (ähnlich wie beim Task-Manager), verwenden Sie diese Funktion:

function Get-CPUUsagePercent
{
$CPUPercent = @{
Name = 'CPUPercent'
Expression = {
$TotalSec = (New-TimeSpan -Start $_.StartTime).TotalSeconds
[Math]::Round( ($_.CPU * 100 / $TotalSec), 2)
}
}
Get-Process | Select-Object -Property Name, $CPUPercent, Description | Sort-Object -Property CPUPercent -Descending | Select-Object -First 20
}
Get-CPUUsagePercent

Um blockierte Prozesse (die nicht reagieren) zu finden, führen Sie den folgenden Befehl aus:

Get-Process | where-object {$_.Responding -eq $false}

Prozess starten, Prozess stoppen: So starten oder stoppen Sie Prozesse mit PowerShell

Um einen neuen Prozess mit PowerShell zu starten, wird dieser Befehl verwendet:

Start-Process -FilePath notepad

Wenn keine ausführbare Datei in der Datei vorhanden ist

$env:path

Geben Sie in der Umgebungsvariablen den vollständigen Pfad zur Datei an:

Start-Process -FilePath 'C:\distr\app.exe'

Sie können ein Programm ausführen und ihm Argumente übergeben:

Start-Process -FilePath ping -ArgumentList "-n 10 10.1.56.21"

Mit der Option WindowStyle können Sie den Startmodus des Prozessfensters festlegen (normal, minimiert, maximiert, ausgeblendet). Um beispielsweise ein Programm in einem maximierten Fenster auszuführen und zu warten, bis der Vorgang abgeschlossen ist, führen Sie diesen Befehl aus:

Start-Process -FilePath tracert -ArgumentList "10.1.56.21" -wait -windowstyle Maximized

Mit dem Cmdlet „Stop-Process“ können Sie jeden Prozess stoppen. Um beispielsweise alle laufenden Notepad-Prozesse zu schließen:

Stop-Process -Name notepad

Standardmäßig werden Sie nicht aufgefordert, das Beenden eines Prozesses zu bestätigen. Alle Prozesse, die die angegebenen Kriterien erfüllen, werden gestoppt. Um stoppende Prozesse bestätigen zu können, fügen Sie die Option -Bestätigen hinzu:

Stop-Process -Name notepad.exe -Confirm

Sie können einen Prozess auch wie folgt beenden:

(Get-Process -Name cmd).Kill()

Von PowerShell aus können Sie das Stoppen aller Apps erzwingen, die nicht auf den Windows-Prozessmanager reagieren:

Get-Process | where-object {$_.Responding -eq $false}| Stop-Process

Mit PowerShell können Sie einen hängengebliebenen oder geschlossenen Prozess automatisch neu starten.

Verwalten Sie Prozesse auf einem Remotecomputer mit PowerShell

Du kannst den ... benutzen

ComputerName

Option des Get-Process-Cmdlets, um Prozesse auf Remotecomputern zu verwalten (WinRM muss aktiviert und konfiguriert sein).

Get-Process -ComputerName srv01, srv02, srv03| Format-Table -Property ProcessName, ID, MachineName

Wir befassen uns mit den integrierten Get-Process-Funktionen zur Verwaltung von Prozessen auf Remote-Computern. PowerShell-Remoting-Funktionen verfügbar in

Invoke-Command

Und

Enter-PSSession

Cmdlets werden hier nicht behandelt.

Wenn Sie einen Prozess auf einem Remotecomputer beenden möchten, beachten Sie, dass das Cmdlet Stop-Process nicht über den Parameter -ComputerName verfügt. Um einen Prozess auf einem Remotecomputer zu stoppen, können Sie den folgenden PowerShell-Code verwenden:

$RemoteProcess = Get-Process -Name cmd -ComputerName srv01
Stop-Process -InputObject $RemoteProcess

Verwandte Artikel