2009-07-03 9 views

risposta

36

Bene ... C'è "altro", che è più o meno (...) lo stesso che ci si aspetta da altre piattaforme. Provate il seguente esempio:

dir -rec | more 
+1

altro fa esattamente questo, quando dai un'occhiata alla definizione della funzione con gcm in più | seleziona Definizione | fl – Joey

+2

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. –

+0

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

2

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.

+0

grazie, corretto la questione – Valentin

+0

tubazioni è estremamente lento per file di grandi dimensioni. Ci sono modi migliori (opzioni built-in) per fare 'head' e' tail' in powershell ora: http://stackoverflow.com/a/41626586/1081043 – wisbucky

14

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.

+0

Grazie! Meno è molto di più! – jpaugh

70

sì, c'è:

some-cmdlet | out-host -paging

+0

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

+0

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. –

+11

Si noti che il parametro -Paging di Out-Host non è supportato in PowerShell ISE. –

23

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.

+1

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

+3

L'alias per 'out-host -paging' è' oh -pa'. – Josh

+1

questo è un commento, piuttosto che una risposta –

2

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).

0

Se si dispone di VIM, mi piace molto dir -r | vim -R -. Sfortunatamente, questo problema si verifica con more (ovvero senza streaming).

0

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"

0

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

0
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 
1
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