Kategorien
Tutorials

Befehlshistory in PowerShell

In der Windows PowerShell gibt es neben den Pfeiltasten "Pfeil nach oben" bzw. "Pfeil nach unten", die durch die letzten Befehle navigieren, noch weitere Möglichkeiten, um durch bereits abgesetzte Befehle zu navigieren. Dabei gibt es zwei verschiedene Formen der History in PowerShell: Eine ist auf die Dauer der Session beschränkt und die Zweite wird auch darüber hinaus gespeichert.

Getestet wurde dieser Artikel unter Windows 10 1607 und PowerShell 5.1.14393.953.

Temporäre History

In der temporären History werden alle eingegebenen Befehle nur für die Dauer der Sitzung gespeichert. Eine Liste dieser Befehle lässt sich mit folgendem Befehl ausgeben:

Get-History
PowerShell History

Wenn ein Befehl gesucht werden soll, der einen bestimmten Teilstring enthält, kann folgender Befehl verwendet werden:

Get-History | Select-String "ping"
PowerShell History durchsuchen

Da der obige Befehl keine IDs ausgibt, die eventuell gebraucht werden, kann der Befehl wie folgt abgeändert werden (LineNumber entspricht dabei der ID des Befehls):

Get-History | Select-String "ping" | Format-Table -Property LineNumber, Line

Wer die Überschriften jetzt noch etwas schöner haben möchte, kann diese auch noch anpassen:

Get-History | Select-String "ping" | Format-Table -Property @{Name="ID";Expression={$_.LineNumber}}, @{Name="Befehl";Expression={$_.Line}}
PowerShell History durchsuchen

Ein bestimmter Befehl aus der Liste lässt sich schließlich auch mit Hilfe seiner ID erneut ausführen:

Invoke-History -Id 2

In diesem Beispiel würde der Befehle hostname ausgeführt werden.

Soll die temporäre History geleert werden, kann folgender Befehl verwendet werden:

Clear-History

Gesamte History

Darüber hinaus gibt es noch eine History, die das Beenden der Session überlebt. Diese Befehle werden in einer Textdatei im Userprofil gespeichert: %AppData%\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

Mit folgendem Befehl lassen sich diese Befehle direkt in der PowerShell anzeigen:

Get-Content (Get-PSReadlineOption).HistorySavePath

Löschen lässt sich diese History mit folgendem Befehl:

Remove-Item (Get-PSReadlineOption).HistorySavePath

Befehle aus History durchsuchen

Ähnlich wie in der Linux-Shell lassen sich Befehle auch durchsuchen. Es reicht die Tasten Strg + R zu drücken und der Anfang des Befehls einzugeben:

PowerShell History durchsuchen

Im oberen Beispiel habe ich get eingegeben und mir wird oberhalb direkt ein gefundener Befehl angezeigt. Mit Tabulator könnte ich den Befehl übernehmen, um ihn weiter zu bearbeiten oder auszuführen.

Mit erneutem Drücken der Tasten Strg + R können die gefundenen Befehle weiter durchsucht werden.


Weiterführende Link
https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/add-history

Quellen
https://blogs.msdn.microsoft.com/stevelasker/2016/03/25/clear-history-powershell-doesnt-clear-the-history-3/

Seit mehreren Jahren begeistere ich mich privat und beruflich für die IT. Das habe ich dann auch zum Anlass genommen, diesen Blog ins Leben zu rufen, um dort praxisnahe Tutorials über verschiedene IT-Themen zu schreiben und meine selbst geschriebene Software zu veröffentlichen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert