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 ProcessGet-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|ftSo zeigen Sie eine Liste laufender Benutzerprozesse mit GUI an (Hintergrund- und Systemprozesse werden nicht angezeigt):
Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitleMit der Option IncludeUserName können Sie einen Benutzernamen (Eigentümer) anzeigen, der den Prozess gestartet hat:
Get-Process -Name winword -IncludeUserNameBenutzen
Where-Objectkö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)" -DescendingWie 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-CPUUsagePercentUm 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 notepadWenn keine ausführbare Datei in der Datei vorhanden ist
$env:pathGeben 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 MaximizedMit dem Cmdlet „Stop-Process“ können Sie jeden Prozess stoppen. Um beispielsweise alle laufenden Notepad-Prozesse zu schließen:
Stop-Process -Name notepadStandardmäß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 -ConfirmSie 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-ProcessMit 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
ComputerNameOption 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, MachineNameWir befassen uns mit den integrierten Get-Process-Funktionen zur Verwaltung von Prozessen auf Remote-Computern. PowerShell-Remoting-Funktionen verfügbar in
Invoke-CommandUnd
Enter-PSSessionCmdlets 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





