More und Less mit der PowerShell

Im letzten Blogeintrag haben wir uns angesehen, man unter Windows 10 ein NAT Gateway mit der PowerShell erstellen kann.

In diesem Blogeintrag schauen wir uns an, wie man den Windows CMD Befehl more beziehungsweise den optimierten Linux Befehl less mit der PowerShell abbilden kann.

In der Windows Welt dient der Befehl more dazu, eine Datei oder die Ausgabe eines Befehls seitenweise auf der Konsole auszugeben und auf Tastendruck die nächste Seite anzuzeigen.

Ursprünglich kommt der Befehl more aus der UNIX Welt und hatte dort deutlich mehr Funktionen. Zum Beispiel konnte man die Dateiausgabe mit regulären Ausdrücken filtern.

In der Linux Welt wird vor allem der Nachfolger less genutzt. Der Hauptvorteil von less gegenüber more ist, dass nicht zuerst die gesamte Datei eingelesen wird (was bei großen Dateien sehr lange dauern kann), sondern kontinuierlich Daten nachgeladen werden. Außerdem kann man mit "Bild hoch" und "Bild runter" in der Datei navigieren.

In der PowerShell gibt es keinen Befehl, der die exakte Funktion von more oder less hat. Aus diesem Grund gib es auch  - anders als bei anderen CMD und bash Befehlen - kein ALIAS auf diese Befehle.

Um die Konsolenausgabe seitenweise auszugeben (zum Beispiel um sich die Hilfe zu einem Befehl anzuschauen), kann der Befehl Out-Host genutzt werden. Dieser hat den Parameter -Paging.

Als Beispiel lasse ich mir die detaillierte Hilfe vom Befehl Out-Host seitenweise ausgeben:

Get-Help Out-Host -Detailed | Out-Host -Paging

Mit der Leertaste komme ich zur nächsten Seite, mit dem Wagenrücklauf zur nächsten Zeile und mit Q beende ich die Ausgabe.

Wer sich nun fragt, wass denn der Wagenrücklauf ist, dem geht es ganauso wie mir am Anfang. Der Wagenrücklauf ist das deutsche Wort für "Carriage Return". Dieses Sonderzeichen sagte alten, zeilenweise druckenden Druckern, dass der Druckkopf wieder zum Zeilenanfang fahren soll (Im ASCII Code Zeichen 13).

In der PowerShell wird der Wagenrücklauf mit den zwei Zeichen `r ausgelöst (Shift + der kleine Strich rechts vom Fragezeichen, danach "r", danach <Enter>) . Zum Glück reicht auch nur <Enter> zu drücken, auch wenn das nicht so beschrieben ist.

Für dem Befehl less mit der Möglichkeit seitenweise rauf und runterzuscrollen gibt es keine direkte Umsetzung mit PowerShell Befehlen. Aber man kann die Möglicheiten der PowerShell Konsole an sich nutzen.

Mit Windows 10 und der PowerShell 5 ist es möglich, mit Bild hoch und Bild runter seitenweise in der Konsolenausgabe zu navigieren.

Das heißt, zuerst lässt man sich die Ausgabe des ganzen Befehls anzeigen:

Get-Help Get-ChildItem - detailed

Danach kann man mit Bild hoch und Bild runter seitenweise in der Ausgabe navigieren. Um zeilenweise zu navigieren, muss man Strg - Bild hoch und Strg - Bild runter nutzen.

Unter Windows 7 ist mir kein Weg bekannt - wenn jemand einen weiß, dann kann er dies gerne in der Kommentarfunktion beschreiben.

Im nächsten Blogeintrag beschäftigen wir uns damit, wie man den genialen Linux bash Befehl grep zum Suchen und Filtern von Konsolenausgabe oder Dateien mit der PowerShell umsetzen kann.

3 Kommentare

  • Antworten Bruno Baketaric |

    Das r (Carriage Return) und übrigens auch n (New Line) ist nicht für die interaktive Eingabe am Terminal gedacht, sondern um diese beiden Zeichen in Strings zu repräsentieren, wie man es von vielen anderen Stellen mit \r und \n kennt – natürlich kann Microsoft hierfür nicht den Backslash (\) aus der Un*x Welt verwenden.

    Also bspw. so:
    Write-Output „1—-FoooonBar" "--------------" "2----FoooornBar" "--------------" "3----FoooorBar“ „————–“

    Was zu dieser Ausgabe führt:
    1—-Foooo
    Bar
    ————–
    2—-Foooo
    Bar
    ————–
    Bar–Foooo
    ————–

    Mit ist nichts weiter als die Taste gemeint, die oft auch als als Kurzform von bezeichnet wird, und de-facto in jedem mir bekannten Terminal immer ein (CR, \r, r) und (Line-Feed, LF, \n, n) ausführt (oder das LF ein CR impliziert).

    Im Kontext dieses Artikels würde ich schlicht mit -Taste übersetzen und den Rest entfallen lassen.

  • Antworten Francesc Hervada-Sala |

    Wenn man auf Windows ist, kann man auch den Befehl out-gridview benutzen, der den Inhalt tabellarisch auf einem separaten Fenster darstellt. Das ist übersichtlicher und der Inhalt wird auch „paginiert“.

Was denken Sie?