2009-07-03 26 views

Respuesta

36

Bueno ... Hay "más", que es más o menos (...) el mismo que esperaría de otras plataformas. Pruebe el siguiente ejemplo:

dir -rec | more 
+1

más hace exactamente eso, cuando echas un vistazo a la definición de la función con gcm más | seleccione Definición | fl – Joey

+2

En realidad, canalizar a más es igual a canalizar a "out-host-paging", que está separado de la implementación de more.com. En la práctica, no hay diferencia discernible. –

+0

Ni en PS1 en Vista ni en PS2 en Win7, al menos para mí."más" es una función que hace un poco de trabajo de antemano y luego simplemente llama a more.com. Out-Host -Paging está separado de eso (y no depende de more.com). La diferencia es más notable cuando utiliza algo que no se devuelve de inmediato, como su ejemplo de gci -rec. La canalización a Out-Host es inmediata, ya que puede procesar la entrada de una línea a la vez, la canalización a más lleva tiempo, ya que PS recoge primero todas las líneas y luego las envía a more.com. – Joey

2

more no se usa para límite de salida, se utiliza para paginar de salida y hacer que sea más fácil de leer en un terminal, en todo caso.

¿Estás hablando de usar head y tail? EggHeadCafe tiene un ejemplo de:

type my.txt | select-object -first 10 

type my.txt | select-object -last 10 

para emular head y tail.

+0

gracias, corrige la cuestión – Valentin

+0

tuberías es extremadamente lento para archivos de gran tamaño. Hay mejores formas (opciones incorporadas) para hacer 'head' y' tail' en powershell ahora: http://stackoverflow.com/a/41626586/1081043 – wisbucky

14

El Powershell Community Extensions tienen una función muy útil llamada 'menos' que proporciona un conjunto más completo de características de estilo Unix, usando una copia portado de less.exe para manejar efectivamente la paginación.

Se puede instalar iniciando una cáscara administrador y funcionando:

Find-Package pscx | Install-Package -Force 

(el force es actualizar versiones anteriores)

Puede cadenas de tubos a la misma, o dar los nombres de archivo como directa parámetros.

type foo.txt | less 
less foo.txt, bar.txt, baz.txt 

funciona en ConEmu y Windows PowerShell, pero por desgracia, no funciona de la manera que cabría esperar bajo la v2.0 ISE.

+0

¡Gracias! ¡Menos es mucho más! – jpaugh

70

Si se encuentra:

some-cmdlet | out-host -paging

+0

Había usado más y menos antes, y no era tan fácil de usar como creía posible. Encontré que esta variación es más útil/utilizable que las otras. Muchas gracias. – TheXenocide

+0

Para imprimir el contenido de un archivo muy grande, esto funcionó muy bien para mí, ya que el cmdlet Get-Content comenzó inmediatamente a canalizar los contenidos al cmdlet out-host. –

+11

Tenga en cuenta que el parámetro -Paging de Out-Host no es compatible con PowerShell ISE. –

23

dir -rec | more es un mal consejo.

Causará PowerShell para evaluar todo el comando antes de darle salida a la pantalla, algo que no se necesita para algo así como la salida paginar

En algunos casos extremos, podría provocar que el sistema se bloquee (por ejemplo dir 'C:\' | more)

Por otro lado, al usar out-host -paging, se generará información en la pantalla, ya que está disponible.

+1

Cuando utiliza powershell remoto y desea canalizar un comando en el servidor remoto de Windows a través de un buscapersonas, la tubería a través de 'out-host-paging' funciona como desee. Canalizar 'más' cuando se ejecuta el comando remoto no sirve: todo el texto se muestra a la vez. – IllvilJa

+3

El alias para 'out-host-paging' es' oh -pa'. – Josh

+1

esto es un comentario, en lugar de una respuesta –

2

que añade una definición de función y el alias al perfil por defecto en %SystemRoot%\system32\windowspowershell\v1.0\profile.ps1

Esta función se basa principalmente en this blog entry by Aman Dhally con el manejo de excepciones añadido para el prensado Q mientras paginación.

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 

por lo que sólo se puede llamar como dir -r | more y inmediatamente comienza paginado de salida debido a la canalización de PowerShell (en contraposición a la espera de la salida completa con more.com).

0

Si tiene VIM instalado, disfruto completamente dir -r | vim -R -. Desafortunadamente, esto tiene el mismo problema con more (es decir, sin transmisión).

0

Me gusta el comando "menos" mejor que el comando "más" porque también puede ir hacia atrás (en lugar de solo hacia adelante). Encuentro esta característica muy útil.

El "menos" de msysgit funciona para mí (para mí, la ruta es C:\Program Files (x86)\Git\bin\less.exe). Tuve errores en powershell con la versión GOW de "menos".

Ejemplo:

ls|less

Para guardar escribir añadí el alias de "L" por menos en mi perfil PowerShell:

sal l "C:\Program Files (x86)\Git\bin\less.exe"

0

Sugerencia: Ponga el archivo en un temporal/archivo .txt desechable, luego deje que el sistema operativo invoque su editor favorito, el que está vinculado a la extensión .txt.

Get-Process | Out-File temp.txt; . \ temp.txt

Nota: cada vez que utilice esto sobrescribirá cualquier archivo temp.txt preexistente. Elija el nombre del archivo sabiamente.

Lo anterior es solo una idea básica.
siguiente paso sería transformando esto en "| más" el uso de alias o funciones de perfil, etc.

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 

gato es un alias de Get-Content - con archivos más grandes que tendrán la - más - de salida en la parte inferior del terminal

puede también puede agregar -wait

cat C:\Temp\test.txt -wait 

-wait es como usar la cola, pero en realidad está volviendo a ejecutar el comando simplemente actualizar la salida

cat C:\Temp\test.txt | oh –Paging 

oh = Out-Host

Cuestiones relacionadas