Existe-t-il un moyen de paginer la sortie en la dirigeant vers une commande 'more', qui est disponible dans les shells linux \ unix?
powershell
Valentin Vasilyev
la source
la source
Réponses:
Eh bien ... Il y a "plus", qui est plus ou moins (...) le même que vous attendez des autres plateformes. Essayez l'exemple suivant:
la source
Oui il y a:
some-cmdlet | out-host -paging
la source
less
est juste une grande application de visualisation de texte qui acceptestdin
le texte. Vous pouvez le diriger vers un fichier temporaire et l'ouvrir dansnano
ouvim
pour EVEN MOAR POWERRRR! Pas le point. PowerShell est commebash
(mais mieux, à mon humble avis).less
n'est pas dedansbash
; c'est un binaire séparé. Donc, votre critique n'est pas valable.oh
est pourOut-Host
, et les paramètres peuvent être abrégés s'il n'y a pas de conflit, donc la commande pourrait êtreSome-Cmdlet | oh -p
dir -rec | more
est un mauvais conseil.Cela obligera PowerShell à évaluer la commande entière avant de la sortir à l'écran, ce qui n'est pas nécessaire pour quelque chose comme la pagination de sortie
Dans certains cas extrêmes, cela pourrait provoquer une panne du système (par exemple
dir 'C:\' | more
)D'un autre côté, utiliser
out-host -paging
affichera les informations à l'écran telles qu'elles sont disponibles.la source
out-host -paging
fonctionne comme vous le souhaitez. Le pipingmore
lors de l'exécution de la commande à distance est inutile: le texte entier est affiché en même temps.out-host -paging
estoh -pa
.Les extensions de communauté Powershell ont une fonction pratique nommée «less» qui fournit un ensemble de fonctionnalités de style Unix plus complet, en utilisant une copie portée de less.exe pour gérer la pagination.
Vous pouvez l'installer en démarrant un shell d'administration et en exécutant:
(il
force
s'agit de mettre à niveau les anciennes versions)Vous pouvez y diriger des chaînes ou donner des noms de fichiers en tant que paramètres directs.
Cela fonctionne dans les fenêtres ConEmu et Powershell, mais malheureusement cela ne fonctionne pas comme vous l'attendriez sous l'ISE v2.0.
la source
force
faut mettre à niveau les anciennes versions" semble un un peu trompeur.Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
Je préfère la commande «moins» à la commande «plus». Avec la commande less, les résultats peuvent également être paginés en arrière au lieu de simplement en avant.
Le «moins» de Git pour Windows fonctionne pour moi (mon chemin est
C:\Program Files (x86)\Git\usr\less.exe
. J'ai eu des erreurs dans Powershell avec la version Gow de «moins».Exemple:
ls|less
Pour enregistrer la saisie, j'ai ajouté l'alias "l" moins cher dans mon profil Powershell:
sal l "C:\Program Files (x86)\Git\bin\less.exe"
la source
less
fan ici. Mais j'obtiens cette erreur. Aucun conseil? ________________________________________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
la source
more
n'est pas utilisé pour limiter la sortie, il est utilisé pour paginer la sortie et la rendre plus facile à lire dans un terminal, le cas échéant.Parlez-vous d'utiliser
head
ettail
? EggHeadCafe a un exemple de:pour émuler
head
ettail
.la source
head
ettail
dans PowerShell maintenant: stackoverflow.com/a/41626586/1081043J'ai ajouté une définition de fonction et un alias à mon profil par défaut à
%SystemRoot%\system32\windowspowershell\v1.0\profile.ps1
Cette fonction est principalement basée sur cette entrée de blog d'Aman Dhally avec une gestion des exceptions supplémentaire pour appuyer
Q
pendant la pagination.donc je peux simplement l'appeler comme
dir -r | more
et il démarre immédiatement la sortie paginée à cause du pipeline de PowerShell (au lieu d'attendre la sortie complète avec more.com).la source
Si vous avez installé VIM, j'apprécie énormément
dir -r | vim -R -
. Malheureusement, cela souffre du même problème avecmore
(ie. Pas de streaming).la source
cat est un alias pour Get-Content - avec des fichiers plus volumineux, vous obtiendrez la sortie - Plus - en bas du terminal
Vous pouvez également ajouter -wait
-wait est comme utiliser tail mais il réexécute la commande juste en rafraîchissant la sortie
oh = hôte externe
la source
J'avais exactement cette question (enfin je voulais moins, pas plus) et j'ai trouvé que la réponse de @ richard-berg a fonctionné pour moi, étant nouveau sur PowerShell (mais pas sur Linux), j'ai trouvé les choses qui manquaient à cette réponse (pour moi) étaient: je devais d'abord aller:
Find-Package pscx | Install-Package
qui a ensuite demandé "installer le paquet nuget". Je l'ai fait mais j'ai ensuite dû utiliser le
-AllowClobber
paramètre surInstall-Package
.puis pour en utiliser moins, je devais:
Set-ExecutionPolicy RemoteSigned
ce qui fonctionnait :-)
la source
Suggestion: mettez le fichier dans un fichier .txt temporaire / jetable, puis laissez le système d'exploitation appeler votre éditeur préféré, celui qui est lié à l'extension .txt.
Get-Process | Out-File temp.txt; . \ temp.txt
Remarque: chaque fois que vous l'utiliserez, vous écraserez tout fichier temp.txt préexistant. Choisissez judicieusement le nom du fichier.
Ce qui précède n'est qu'une idée de base.
La prochaine étape consisterait à transformer cela en "| plus" en utilisant des alias ou des fonctions de profil, etc.
HTH, Marcelo Finkielsztein
la source