C'è un modo per impaginare l'output collegandolo ad un comando 'more', che è disponibile nelle shell linux \ unix?Equivalente del comando "more" o "less" in PowerShell?
risposta
Bene ... C'è "altro", che è più o meno (...) lo stesso che ci si aspetta da altre piattaforme. Provate il seguente esempio:
dir -rec | more
more
non viene utilizzato per limite uscita, è utilizzato per impaginare uscita e rendere più facile la lettura in un terminale, se non altro.
Stai parlando di utilizzare head
e tail
? EggHeadCafe ha un esempio di:
type my.txt | select-object -first 10
type my.txt | select-object -last 10
per emulare head
e tail
.
Il Powershell Community Extensions hanno una comoda funzione denominata 'meno' che fornisce un set di funzionalità più completo in stile Unix, utilizzando una copia porting di less.exe per gestire in realtà il paging.
È possibile installarlo avviando un guscio amministratore e funzionante:
Find-Package pscx | Install-Package -Force
(il force
è quello di aggiornare le versioni precedenti)
Puoi stringhe di tubi ad esso, o dare nomi di file come diretta parametri.
type foo.txt | less
less foo.txt, bar.txt, baz.txt
Funziona in ConEmu e Windows PowerShell, ma purtroppo non funziona il modo in cui ci si aspetta sotto la v2.0 ISE.
Grazie! Meno è molto di più! – jpaugh
sì, c'è:
some-cmdlet | out-host -paging
Avevo usato più e meno prima, né essere abbastanza user friendly come avrei dovuto pensare possibile. Ho trovato questa variazione più utile/utilizzabile rispetto agli altri. Grazie mille. – TheXenocide
Per la stampa del contenuto di un file molto grande questo ha funzionato molto bene per me dato che il cmdlet Get-Content ha iniziato immediatamente a reindirizzare il contenuto al cmdlet esterno. –
Si noti che il parametro -Paging di Out-Host non è supportato in PowerShell ISE. –
dir -rec | more
è un cattivo consiglio.
Esso provocherà powershell per valutare l'intero comando prima uscita allo schermo, cosa che non è necessario per qualcosa come uscita impaginazione
In alcuni casi estremi, potrebbe causare il blocco del sistema (ad esempio dir 'C:\' | more
D'altra parte, l'utilizzo di out-host -paging
restituirà le informazioni sullo schermo non appena disponibili.
Quando si utilizza PowerShell remoto e si desidera eseguire il piping di un comando sul server Windows remoto tramite un cercapersone, piping attraverso 'out-host -paging' funziona come desiderato. Eseguire il piping di 'more' quando si esegue il comando remoto è inutile: l'intero testo viene visualizzato contemporaneamente. – IllvilJa
L'alias per 'out-host -paging' è' oh -pa'. – Josh
questo è un commento, piuttosto che una risposta –
ho aggiunto una definizione di funzione e alias per il mio profilo predefinito a %SystemRoot%\system32\windowspowershell\v1.0\profile.ps1
Questa funzione si basa soprattutto sulla this blog entry by Aman Dhally con la gestione delle eccezioni aggiunto per pressatura Q
mentre paging.
function more2
{
param(
[Parameter(ValueFromPipeline=$true)]
[System.Management.Automation.PSObject]$InputObject
)
begin
{
$type = [System.Management.Automation.CommandTypes]::Cmdlet
$wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand(‘Out-Host’, $type)
$scriptCmd = {& $wrappedCmd @PSBoundParameters -Paging }
$steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
$steppablePipeline.Begin($PSCmdlet)
}
process
{
try
{
$steppablePipeline.Process($_)
}
catch
{
break;
}
}
end
{
$steppablePipeline.End()
}
#.ForwardHelpTargetName Out-Host
#.ForwardHelpCategory Cmdlet
}
New-Alias more more2
così posso lo chiamano semplicemente come dir -r | more
e immediatamente inizia paging uscita a causa della condotta di PowerShell (al contrario di attesa per l'uscita completa di more.com).
Se si dispone di VIM, mi piace molto dir -r | vim -R -
. Sfortunatamente, questo problema si verifica con more
(ovvero senza streaming).
Mi piace il comando "less" meglio del comando "more" perché puoi andare anche indietro (anziché solo avanti). Trovo questa funzionalità molto utile.
Il "minore" da msysgit funziona per me (per me, il percorso è C:\Program Files (x86)\Git\bin\less.exe
). Ho avuto errori in PowerShell con la versione GOW di "less".
Esempio:
ls|less
Per salvare digitando ho aggiunto l'alias "l" per meno nel mio profilo PowerShell:
sal l "C:\Program Files (x86)\Git\bin\less.exe"
Suggerimento: Inserire il file in una temporanea/file .txt usa e getta, quindi lascia che il SO invochi il tuo editor preferito, quello che è collegato all'estensione .txt.
Get-Process | Out-File temp.txt; . \ temp.txt
Nota: ogni volta che lo si utilizza, si sovrascriverà qualsiasi file temp.txt preesistente. Scegli saggiamente il nome del file.
Quanto sopra è solo un'idea di base.
passo successivo sarebbe quello trasformando questo in "| more" utilizzando alias o funzioni di profilo, ecc
HTH, Marcelo Finkielsztein
PS> cd C:\
PS> dir -r -ex 0 | out-Host -paging
PS> dir -file -r -ea 0 c:\Windows | Select FullName,Length,LastWriteTime | out-gridview
cat C:\Temp\test.txt
gatto è un alias per Get-Content - con file di dimensioni maggiori si otterrà il - Altro - uscita sul fondo del terminale
È possibile inoltre è possibile aggiungere -wait
cat C:\Temp\test.txt -wait
-wait è come usare la coda, ma in realtà è eseguire nuovamente il comando appena rinfrescante l'uscita
cat C:\Temp\test.txt | oh –Paging
oh = Out-Host
altro fa esattamente questo, quando dai un'occhiata alla definizione della funzione con gcm in più | seleziona Definizione | fl – Joey
In realtà, il piping su più è uguale alla piping su "out-host-paging", che è separato dall'implementazione di more.com. In pratica, però, non c'è alcuna differenza percepibile. –
Né su PS1 su Vista né su PS2 su Win7, almeno per me."more" è una funzione che fa un po 'di lavoro in anticipo e chiama semplicemente more.com. Out-Host -Paging è separato da quello (e non dipende da more.com). La differenza è più evidente quando usi qualcosa che non ritorna immediatamente, come ad esempio il tuo esempio gci -rec. Piping to Out-Host è immediato, in quanto può elaborare l'input di una riga alla volta, piping a più richiede tempo come PS prima raccoglie tutte le linee e poi li invia a more.com. – Joey