Windows PowerShell speichert den Befehlsverlauf automatisch und zuverlässig, was praktisch ist, wenn man einen gerade eingegebenen Befehl erneut ausführen möchte. Im Prinzip werden alle Befehle in einer Textdatei protokolliert – Windows macht es einem natürlich unnötig schwer. Die gespeicherten Informationen finden Sie in der Datei „ConsoleHost_history.txt“ unter „%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt“. So können Sie jederzeit den Verlauf einsehen oder dort weitermachen, wo Sie aufgehört haben. Außerdem können Sie in Ihrer aktuellen Sitzung Befehle wie „ Get-History“ oder die Pfeiltaste nach oben in der Konsole verwenden, um schnell darauf zuzugreifen. Aber Achtung: Sobald Sie das Fenster schließen, wird der Verlauf gelöscht, sofern er nicht an anderer Stelle gespeichert wurde.
Diese Vorgehensweise ist ziemlich ärgerlich für alle, die mit sensiblen Daten arbeiten. Wenn Sie Befehle mit Passwörtern, Tokens oder persönlichen Informationen kopieren und vergessen, diese zu löschen, bleiben diese Informationen in der Klartextdatei erhalten. Daher ist es gut zu wissen, wie man damit umgeht, wenn Datenschutz wichtig ist. Glücklicherweise bietet PowerShell die Möglichkeit, diesen Verlauf zu kontrollieren oder zu löschen – was notwendig sein kann, wenn Sie vertrauliche Anmeldeinformationen verarbeiten oder einfach aus Sicherheitsgründen aufräumen möchten.
Wie man den PowerShell-Befehlsverlauf für eine bessere Kontrolle korrigiert
PowerShell-Verlauf anzeigen und verwalten
- In PowerShell können Sie durch Drücken der Up arrowStrg-Taste durch die vorherigen Befehle Ihrer Sitzung navigieren, sodass Sie Befehle nicht erneut eingeben müssen, wenn Sie sie nur kurz wiederholen möchten. Alternativ können Sie mit ` Get-History` alle bisher ausgeführten Befehle inklusive detaillierter Informationen wie Zeitstempel auflisten. Möchten Sie einen bestimmten Befehl erneut ausführen? Notieren Sie sich einfach seine ID aus der Liste und geben Sie dann `Get-History` ein
Invoke-History 6. Es ist etwas umständlich, funktioniert aber. - Windows PowerShell 5.1 und PowerShell Core speichern bis zu 4096 Befehle in einer speziellen Verlaufsdatei. Diese lässt sich mit jedem Texteditor, z. B.Notepad, öffnen
notepad (Get-PSReadLineOption | select -ExpandProperty HistorySavePath). Das ist hilfreich, wenn Sie sehen möchten, was außerhalb Ihrer aktuellen Sitzung gespeichert wurde.
Suche in Ihrem Befehlsverlauf
- Sie möchten nicht mehr durch Hunderte von Befehlen scrollen? Drücken Sie nach dem Drücken von Strg+R für die Rückwärtssuche oder Strg+S für die Vorwärtssuche und geben Sie anschließend einen Teil des Befehls ein. So werden Ihre gespeicherten Befehle durchsucht – schneller als mit den Pfeiltasten. Drücken Sie Strg+R CTRL+Roder Strg+S CTRL+Sso lange, bis Sie den gewünschten Befehl gefunden haben, oder drücken Sie Strg+S Esc, um den Vorgang abzubrechen.
- Um schnell Befehle zu finden, die mit einer bestimmten Zeichenfolge beginnen, geben Sie einfach
#get-wmi„“ (oder Ihr Suchmuster) ein und drücken Sie die Eingabetaste Tab. Der letzte passende Befehl wird angezeigt. Klingt etwas ungewöhnlich, ist aber praktisch.
Konfigurieren, wie PowerShell den Befehlsverlauf speichert
- Standardmäßig verwaltet PSReadLine Ihren Verlauf, und Sie können dieses Verhalten anpassen. Um die aktuellen Einstellungen anzuzeigen, führen Sie folgenden Befehl aus:
Get-PSReadlineOption | selectund überprüfen Sie Optionen wie HistoryNoDuplicates (vermeidet wiederholte Befehle), MaximumHistoryCount (maximal speicherbare Befehle, Standardwert 4096) oder HistorySavePath (Speicherort).Möchten Sie mehr Verlauf speichern? Erhöhen Sie die Anzahl:Set-PSReadlineOption -MaximumHistoryCount 10000. - Sie können auch festlegen, dass doppelte Befehle nicht gespeichert werden oder das Speichern aus Sicherheitsgründen ganz deaktiviert wird, zum Beispiel so:
Set-PSReadlineOption -HistorySaveStyle SaveNothing. Dadurch wird sichergestellt, dass nach jeder Sitzung nichts gespeichert wird. - Ein weiterer praktischer Trick: Sie können PowerShell so konfigurieren, dass Befehle, die mit einem Leerzeichen beginnen, ignoriert werden. Fügen Sie beispielsweise folgenden Profilcode hinzu:
Set-PSReadLineOption -AddToHistoryHandler { param($command) if ($command -like ' *') { return $false } return $true }Und dann werden alle Befehle, die mit einem Leerzeichen beginnen, nicht gespeichert. Denn natürlich muss PowerShell es einem besonders schwer machen und verlangen, dass man die Ausführungsrichtlinie auf „ Remotesigned“ setzt, damit das funktioniert:
Set-ExecutionPolicy Remotesigned
Schützen Sie sensible Befehle und löschen Sie den Verlauf.
- Wenn Sie Passwörter, Schlüssel oder sensible Informationen eingeben und nicht möchten, dass diese gespeichert werden, können Sie PowerShell so konfigurieren, dass Befehle, die mit einem Leerzeichen beginnen, ignoriert werden – wie oben gezeigt. Für zusätzliche Sicherheit können Sie die Verlaufsdatei jedoch auch manuell löschen:
Remove-Item (Get-PSReadLineOption).HistorySavePath - Beachten Sie, dass dadurch nur der gespeicherte Verlauf gelöscht wird, nicht Ihre aktuelle Sitzung. Um Ihren aktuellen Verlauf zu löschen, führen Sie folgenden Befehl
Clear-Historyfür die Sitzung aus: oder löschen Sie die Verlaufsdatei für eine vollständige Bereinigung. - Wenn Sie verhindern möchten, dass PowerShell den Verlauf automatisch speichert, führen Sie folgenden Befehl aus:
Set-PSReadlineOption -HistorySaveStyle SaveNothing. Beachten Sie jedoch, dass Sie dadurch die praktische Funktion zum Abrufen des Verlaufs vollständig verlieren.
Befehlsverlauf exportieren und importieren zur anderweitigen Verwendung
- Möchten Sie Ihre gespeicherten Befehle auf verschiedenen Computern oder in verschiedenen Sitzungen verwenden? Exportieren Sie sie mit:
Get-History | Export-Clixml -Path c:\ps\commands_hist.xml. Um sie in eine neue Sitzung zu importieren:Add-History -InputObject (Import-Clixml -Path c:\ps\commands_hist.xml). - Manche Benutzer kopieren die gesamte Verlaufsdatei – beispielsweise %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt – in den Profilordner eines anderen Rechners. Das ist zwar umständlich, erfüllt aber seinen Zweck, sofern es korrekt konfiguriert ist.
Einerseits ist das Verlaufssystem von PowerShell recht flexibel, sobald man es verstanden hat. Andererseits kann es etwas umständlich sein, wenn man mit sensiblen Daten arbeitet oder mehr Kontrolle wünscht. Das Ausprobieren der Einstellungen und die manuelle Verwaltung der Verlaufsdatei können einem später viel Ärger ersparen.