Powershell'deki 'daha fazla' veya 'daha az' komutuna eşdeğer mi?


94

Çıktıyı linux \ unix kabuklarında bulunan bazı 'daha fazla' komuta borulayarak sayfalandırmanın bir yolu var mı?


1
Daha azını bilmeyenler için, geriye doğru gidebilmeniz, okları kullanabilmeniz, sayfa yukarı / aşağı kullanabilmeniz ve hatta '/' tuşunu kullanarak arama yapabilmeniz ve sonuçların vurgulanmasını sağlayabilirsiniz.
Constantino Cronemberger

Yanıtlar:


69

Pekala ... "Daha fazla" var, bu da aşağı yukarı (...) diğer platformlardan beklediğinizle aynı. Aşağıdaki örneği deneyin:

dir -rec | more

1
daha fazlası tam olarak bunu yapar, fonksiyonun tanımına gcm ile baktığınızda daha fazla | seçin Tanım | fl
Joey

2
Aslında, daha fazlasına borulama, more.com uygulamasından ayrı olan "ana bilgisayar dışında-sayfalamaya" yönlendirmeye eşittir. Pratikte farkedilebilir bir fark yoktur.
Jouni Heikniemi

1
İlginç! Benim için gcm daha fazla iki tanım döndürür, biri boş bir bağımsız değişken verildiğinde "$ input | out-host -p" yapan bir PowerShell işlevidir, bu gci -rec | Daha. Öte yandan, gci -rec | more.com, normal more.com davranışını alıyorum. PS2 yüklü W7 RC'de, sadece "daha fazla" yazarken bile more.com'u buluyorum. PS1 ile Vista'da, yukarıda açıklanan davranış gerçekleşir. Huddledmasses.org/… ' ye dayanarak, işlevin W7'de de çalıştırılması gerektiğini düşünmez misiniz? Hmm ...
Jouni Heikniemi

1
Üzgünüm, bu pek iyi yazılmış değildi. Demek istediğim, PowerShell 1 ile Vista'da sadece "daha fazla" için borulama Out-Host -p'yi çağırırken, PowerShell 2 ile W7'de more.com'u çağırıyor.
Jouni Heikniemi

1
Eep, düzeltildim. Afedersiniz. Evet, gerçekten, PS 1'de Out-Host -p'yi çağırıyor, more.com'u değil (kendi kendine not: Çok benzer görünse bile her zaman tüm işlevi oku)
Joey

103

Evet var:

some-cmdlet | out-host -paging


Daha önce gittikçe daha az kullanmıştım, ne mümkün olduğunu düşündüğüm kadar kullanıcı dostu değildi. Bu varyasyonu diğerlerinden daha kullanışlı / kullanışlı buldum. Çok teşekkürler.
TheXenocide

Çok büyük bir dosyanın içeriğini yazdırmak için bu, Get-Content cmdlet'i içeriği ana bilgisayar dışı cmdlet'e yönlendirmeye hemen başladığından benim için çok iyi çalıştı.
Germán

13
Out-Host'un -Paging parametresinin PowerShell ISE'de desteklenmediğini unutmayın.
Martin Hollingsworth

@BrunoBrant Konu bu değil. Çıkışı herhangi bir şeye yönlendirebilirsiniz; lesssadece metin stdiniçin kabul eden büyük bir metin görüntüleme uygulamasıdır . Onu geçici bir dosyaya aktarabilir ve içinde nanoveya vimEVEN MOAR POWERRRR için açabilirsiniz! Konu değil. PowerShell gibidir bash(ama daha iyisi, imho). lessiçinde değil bash; bu ayrı bir ikili. Yani eleştiriniz geçerli değil.
Alan McBee - MSFT

7
Ayrıca, yanıtı yorumlayın: takma ad ohiçindir Out-Hostve herhangi bir çakışma yoksa parametreler kısaltılabilir, bu nedenle komut şöyle olabilirSome-Cmdlet | oh -p
Alan McBee - MSFT

34

dir -rec | more kötü bir tavsiye.

Bu, powershell'in tüm komutu ekrana çıktılamadan önce değerlendirmesine neden olur, bu da çıktı sayfalama gibi bir şey için gerekli değildir.

Bazı aşırı durumlarda, sistemin çökmesine neden olabilir (örn. dir 'C:\' | more)

Öte yandan, out-host -pagingkullanımı mevcut olduğu şekilde ekrana bilgi çıkışı sağlayacaktır.


2
Uzak powershell kullandığınızda ve uzak Windows sunucusundaki bir komutu bir çağrı cihazı aracılığıyla yönlendirmek out-host -paging istediğinizde , boru hattı istenildiği gibi çalışır. moreUzaktan komut çalıştırılırken bağlantıya geçmenin faydası yoktur: metnin tamamı aynı anda görüntülenir.
IllvilJa

5
İçin takma out-host -pagingDİR oh -pa.
Josh

26

PowerShell Topluluk Uzantıları aslında çağrıyı işlemek için less.exe bir portlu kopyasını kullanarak, daha eksiksiz Unix tarzı özellik kümesi sağlar 'daha az' adlı bir kullanışlı fonksiyonu var.

Bir yönetici kabuğu başlatıp şunu çalıştırarak kurabilirsiniz :

Find-Package pscx | Install-Package -Force

( forceeski sürümleri yükseltmektir)

Dizeleri ona yönlendirebilir veya doğrudan parametreler olarak dosya adları verebilirsiniz.

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

ConEmu ve Powershell pencerelerinde çalışır, ancak maalesef v2.0 ISE'de beklediğiniz şekilde çalışmaz.


5
Kurulum, birkaç temel Powershell komutunu (gcb, Expand-Archive, Format-Hex, Get-Hash, help, bilgi istemi, Get-Clipboard, Get-Help, Set-Clipboard) geçersiz kılar, bu nedenle " forceeski sürümleri yükseltmek için" biraz yanıltıcı.
TNT

sadece hatalar veya uyarılar olmadan mevcut kullanıcı için kurulum:Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
Andreas Dietrich

Harika ipucu için teşekkürler!
Rui Craveiro

9

"Daha az" komutunu "daha fazla" komutuna tercih ederim. Daha az komutla, sonuçlar sadece ileri doğru değil geriye doğru da sayfalanabilir.

Windows için Git'teki "daha az" benim için çalışıyor (Benim yolum, C:\Program Files (x86)\Git\usr\less.exePowershell'de "daha az" Gow sürümünde hatalar yaşadım .

Misal:

ls|less

Yazmayı kaydetmek için Powershell profilime "l" takma adını daha ucuza ekledim:

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


2
Ben de. Geriye doğru sayfalamanın yanı sıra, daha azı sonuç üzerinde metin araması yapmama izin veriyor (eğik çizgi, sonra metin yazın, sonra enter'a basın, ardından sonraki sonuç için 'n', önceki sonuç için 'p'). Çok çok kullanışlı.
Rui Craveiro

lessBurada başka bir hayran. Ama bu hatayı alıyorum. Herhangi bir tavsiye? ________________________________________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
olisteadman

@olisteadman, Bu less.exe'nin resmi Git sürümüdür. Git for Windows gitforwindows.org sürümünü daha az denediniz mi?
Josh

"Ana bilgisayar dışı" kullanmaya gerek yok. Bunu kullanıyorum: "Get-Content tmpf | C: \ cygwin64 \ bin \ less.exe"
Constantino Cronemberger

1
$ Env: PAGER = "C: \ cygwin64 \ bin \ less.exe" ayarlamak da çok iyi bir fikirdir, bu nedenle örneğin "yardım" yazdığınızda kullanılacaktır
Constantino Cronemberger

4
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

3

moreiçin kullanılmaz sınır çıkışı, bu için kullanılan paginate çıktı ve bir şey olursa daha kolay bir terminalde okumayı kolaylaştırır.

Kullandığınız bahsediyorsun headve tail? EggHeadCafe'in bir örneği vardır:

type my.txt | select-object -first 10

type my.txt | select-object -last 10

taklit etmek headve tail.


Borulama, büyük dosyalar için aşırı derecede yavaştır. Şimdi powershell'de yapmanın headve yapmanın daha iyi yolları (yerleşik seçenekler) var tail: stackoverflow.com/a/41626586/1081043
wisbucky

2

Adresindeki varsayılan profilime bir işlev tanımı ve takma ad ekledim %SystemRoot%\system32\windowspowershell\v1.0\profile.ps1

Bu işlev çoğunlukla Aman Dhally'nin bu blog girişine dayanmaktadır ve Qsayfalandırma sırasında basmak için istisna işleme eklenmiştir .

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

bu yüzden onu sadece beğenebilirim dir -r | moreve PowerShell'in ardışık düzeni nedeniyle sayfalı çıktıya hemen başlar (more.com ile tam çıktı beklemenin aksine).


1

Eğer VIM yüklediyseniz, ben tamamen zevk alıyorum dir -r | vim -R -. Maalesef bu aynı sorunu yaşıyor more(yani akış yok).


1
cat C:\Temp\test.txt

cat, Get-Content için bir takma addır - daha büyük dosyalarla terminalin altında - Daha Fazla - çıktısını alırsınız

Ayrıca -wait ekleyebilirsiniz.

cat C:\Temp\test.txt -wait 

-wait, tail'i kullanmak gibidir, ancak aslında komutu yeniden çalıştırarak çıktıyı yeniler

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

oh = Ana Bilgisayar Dışı


1

Tam olarak bu soruyu sormuştum (daha az istedim, daha fazlasını değil) ve @ richard-berg'in yanıtının benim için çalıştığını, PowerShell'de yeni olduğunu (ancak Linux için değil) buldum, bu cevapta eksik olan şeyleri buldum (benim için) şunlardı: Önce gitmem gerekiyordu:

Find-Package pscx | Install-Package

bu da "nuget paketini kurmamı" istedi. Bunu yaptım ama sonra
-AllowClobberparametreyi kullanmak zorunda kaldım Install-Package.

sonra daha az kullanmak için yapmam gerekiyordu:

Set-ExecutionPolicy RemoteSigned

hangisi işe yaradı :-)


Siteye hoş geldiniz. "24 numaralı cevap" ile ne demek istediğinizden emin değilim. Bu sayılar, numaralandırmadan ziyade oylardır (değişebilir).
mhhollomon

Ah, anlıyorum ... ilk kez yığılmayı yayınladım! @ Richard-berg'in cevabını kastetmiştim, benim için bu kabul edilen cevap olurdu
Bill Naylor

Neden olumsuz oy aldığımdan emin değil misiniz? Görünüşe göre (bana) bir şeyin işe yarayıp yaramadığını doğrulamak faydalı!
Bill Naylor

0

Öneri: Dosyayı geçici / tek kullanımlık bir .txt dosyasına koyun, ardından işletim sisteminin .txt uzantısına bağlı olan favori düzenleyicinizi çağırmasına izin verin.

Get-Süreci | Dosya Dışı temp.txt; . \ temp.txt

Not: Bunu her kullandığınızda, önceden var olan herhangi bir temp.txt dosyasının üzerine yazacaksınız. Dosya adını akıllıca seçin.

Yukarıdakiler sadece temel bir fikirdir.
Sonraki adım, takma adlar veya profil işlevleri vb. Kullanarak bunu "| daha fazlasına" dönüştürmek olacaktır.

HTH, Marcelo Finkielsztein

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.