Gibt es eine Möglichkeit, die Ausgabe zu paginieren, indem Sie sie an einen 'more'-Befehl weiterleiten, der in Linux \ unix-Shells verfügbar ist?
powershell
Valentin Vasilyev
quelle
quelle
Antworten:
Nun ... Es gibt "mehr", was mehr oder weniger (...) dem entspricht, was Sie von anderen Plattformen erwarten würden. Versuchen Sie das folgende Beispiel:
quelle
Ja da ist:
some-cmdlet | out-host -paging
quelle
less
ist nur eine große Text-Viewer-Anwendung, diestdin
den Text akzeptiert . Sie können es in eine temporäre Datei leiten und innano
odervim
für EVEN MOAR POWERRRR öffnen! Nicht der Punkt. PowerShell ist wiebash
(aber besser, imho).less
ist nicht inbash
; Es ist eine separate Binärdatei. Ihre Kritik ist also nicht gültig.oh
ist fürOut-Host
und Parameter können abgekürzt werden, wenn kein KonfliktSome-Cmdlet | oh -p
dir -rec | more
ist ein schlechter Rat.Dadurch wird Powershell veranlasst, den gesamten Befehl auszuwerten, bevor er auf dem Bildschirm ausgegeben wird. Dies wird für die Ausgabe-Paginierung nicht benötigt
In einigen extremen Fällen könnte es das System zum Absturz bringen (zB
dir 'C:\' | more
)Wenn Sie dagegen verwenden,
out-host -paging
werden Informationen auf dem Bildschirm ausgegeben, sobald sie verfügbar sind.quelle
out-host -paging
wie gewünscht. Das Durchleitenmore
beim Ausführen des Remote-Befehls ist nutzlos: Der gesamte Text wird auf einmal angezeigt.out-host -paging
istoh -pa
.Die Powershell Community Extensions verfügen über eine praktische Funktion namens "less", die einen umfassenderen Funktionsumfang im Unix-Stil bietet und eine portierte Kopie von less.exe verwendet, um das Paging tatsächlich zu verarbeiten.
Sie können es installieren, indem Sie eine Admin-Shell starten und Folgendes ausführen :
(das
force
ist, ältere Versionen zu aktualisieren)Sie können Zeichenfolgen an diese weiterleiten oder Dateinamen als direkte Parameter angeben.
Es funktioniert in ConEmu- und Powershell-Fenstern, aber leider nicht so, wie Sie es unter der ISE v2.0 erwarten würden.
quelle
force
älteren Versionen zu aktualisieren ist" scheint ein ein bisschen irreführend.Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
Ich bevorzuge den Befehl "weniger" gegenüber dem Befehl "mehr". Mit dem Befehl less können Ergebnisse auch rückwärts anstatt nur vorwärts ausgelagert werden.
Das "less" von Git für Windows funktioniert für mich (Mein Pfad ist
C:\Program Files (x86)\Git\usr\less.exe
. Ich hatte Fehler in Powershell mit der Gow- Version von "less".Beispiel:
ls|less
Um das Tippen zu sparen, habe ich in meinem Powershell-Profil den Alias "l" für weniger hinzugefügt:
sal l "C:\Program Files (x86)\Git\bin\less.exe"
quelle
less
Fan hier. Aber ich bekomme diesen Fehler. Irgendein Rat? ________________________________________PS C:\Users\oli> Get-Content tmpf | out-host 'C:\Program Files\Git\usr\bin\less.exe' Out-Host : A positional parameter cannot be found that accepts argument 'C:\Program Files\Git\usr\bin\less.exe'. At line:1 char:20 + Get-Content tmpf | out-host 'C:\Program Files\Git\usr\bin\less.exe' + CategoryInfo : InvalidArgument: (:) [Out-Host], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.OutHostCommand
quelle
more
wird nicht verwendet, um die Ausgabe zu begrenzen , sondern um die Ausgabe zu paginieren und das Einlesen in einem Terminal zu erleichtern, wenn überhaupt.Sprechen Sie über die Verwendung von
head
undtail
? EggHeadCafe hat ein Beispiel für:zu emulieren
head
undtail
.quelle
head
undtail
jetzt in Powershell: stackoverflow.com/a/41626586/1081043Ich habe meinem Standardprofil unter eine Funktionsdefinition und einen Alias hinzugefügt
%SystemRoot%\system32\windowspowershell\v1.0\profile.ps1
Diese Funktion basiert hauptsächlich auf diesem Blogeintrag von Aman Dhally mit zusätzlicher Ausnahmebehandlung für das Drücken
Q
während des Paging.Ich kann es also einfach so nennen
dir -r | more
und es startet sofort die ausgelagerte Ausgabe aufgrund der PowerShell-Pipeline (im Gegensatz zum Warten auf die vollständige Ausgabe mit more.com).quelle
Wenn Sie VIM installiert haben, genieße ich es sehr
dir -r | vim -R -
. Leider hat dies das gleiche Problem mitmore
(dh kein Streaming).quelle
cat ist ein Alias für Get-Content. Bei größeren Dateien erhalten Sie die Ausgabe - More - unten im Terminal
Sie können auch -wait hinzufügen
-wait ist wie die Verwendung von tail, führt jedoch den Befehl erneut aus und aktualisiert nur die Ausgabe
oh = Out-Host
quelle
Ich hatte genau diese Frage (nun, ich wollte weniger, nicht mehr) und fand, dass die Antwort von @ richard-berg für mich funktionierte. Da ich neu in PowerShell (aber nicht in Linux) war, fand ich die Dinge, die in dieser Antwort fehlten (für mich). waren: Ich musste zuerst gehen:
Find-Package pscx | Install-Package
was dann zur "Installation des Nuget-Pakets" aufforderte. Ich habe das gemacht, musste dann aber den
-AllowClobber
Parameter on verwendenInstall-Package
.dann musste ich um weniger zu
Set-ExecutionPolicy RemoteSigned
verbrauchen : was alles funktionierte :-)
quelle
Vorschlag: Legen Sie die Datei in eine temporäre / wegwerfbare TXT-Datei und lassen Sie das Betriebssystem Ihren bevorzugten Editor aufrufen, der mit der Erweiterung .txt verknüpft ist.
Get-Process | Out-File temp.txt; . \ temp.txt
Hinweis: Jedes Mal, wenn Sie dies verwenden, überschreiben Sie eine bereits vorhandene temp.txt-Datei. Wählen Sie den Dateinamen mit Bedacht aus.
Das Obige ist nur eine Grundidee.
Der nächste Schritt wäre, dies unter Verwendung von Aliasen oder Profilfunktionen usw. in "| more" umzuwandeln.
HTH, Marcelo Finkielsztein
quelle