पॉवरशेल में 'अधिक' या 'कम' कमांड के बराबर?


93

क्या आउटपुट को कुछ 'अधिक' कमांड से पाइपिंग करने का एक तरीका है, जो linux \ unix गोले में उपलब्ध है?


जो लोग कम नहीं जानते हैं, उनके बारे में कुछ अच्छी बातें यह है कि आप पीछे की ओर जा सकते हैं, तीर का उपयोग कर सकते हैं, पृष्ठ का उपयोग कर सकते हैं / नीचे और यहां तक ​​कि कुंजी का उपयोग करके खोज कर सकते हैं / 'और परिणाम हाइलाइट किए गए हैं।
कॉन्सटेंटिनो क्रोनमबर्गर

जवाबों:


68

खैर ... वहाँ "अधिक" है, जो कमोबेश (...) वही है जो आप अन्य प्लेटफार्मों से उम्मीद करेंगे। निम्न उदाहरण का प्रयास करें:

dir -rec | more

1
अधिक वास्तव में यही करता है, जब आप फ़ंक्शन की परिभाषा को gcm अधिक के साथ देखते हैं। चुनिंदा परिभाषा | fl
जॉय

2
दरअसल, अधिक से अधिक पाइपिंग "आउट-होस्ट-होस्टिंग" के लिए पाइपिंग के बराबर है, जो कि अधिक.कॉम कार्यान्वयन से अलग है। व्यवहार में, हालांकि कोई अंतर नहीं है।
जौनी हकीमनी

1
दिलचस्प! मेरे लिए, gcm अधिक दो परिभाषाएँ देता है, एक एक PowerShell फ़ंक्शन है, जो खाली तर्क दिए जाने पर, "$ इनपुट | आउट-होस्ट -p" करता है, जो कि वह व्यवहार है जिसे मैं gci -rec पर देख रहा हूं। अधिक। दूसरी तरफ, जब मैं gci -rec करता हूँ | more.com, मुझे सामान्य more.com व्यवहार मिलता है। पीएस 2 के साथ डब्ल्यू 7 आरसी पर, मुझे "अधिक" टाइप करने पर भी अधिक.कॉम प्राप्त होने लगते हैं। विस्टा पर PS1 के साथ, ऊपर वर्णित व्यवहार होता है। Huddledmasses.org/… के आधार पर , क्या आपको नहीं लगता कि फ़ंक्शन को W7 पर भी निष्पादित किया जाना चाहिए? हम्म ...
जौनी हकीमनी

1
क्षमा करें, यह विशेष रूप से अच्छी तरह से नहीं लिखा गया था। तो मेरा कहना था कि विस्टा पर पॉवरशेल 1 के साथ, सिर्फ "अधिक" करने के लिए पाइपिंग आउट-होस्ट-पी को आमंत्रित करता है जबकि डब्ल्यू 7 पर पॉवरशेल 2 के साथ यह अधिक डॉट कॉम को आमंत्रित करता है।
जौनी हकीमनी

1
Eep, मैं सही खड़ा हूँ। माफ़ करना। हां, वास्तव में, पीएस 1 में यह आउट-होस्ट-पी को आमंत्रित करता है, न कि अधिक.कॉम (स्वयं पर ध्यान दें: हमेशा पूरे फ़ंक्शन को पढ़ें, भले ही यह बहुत समान दिखता हो)
जॉय

103

हाँ वहाँ है:

some-cmdlet | out-host -paging


मैंने पहले कम और अधिक उपयोग किया था, न ही उपयोगकर्ता के अनुकूल होने के कारण जितना संभव हो मुझे सोचना चाहिए। मुझे यह भिन्नता अन्य लोगों की तुलना में अधिक उपयोगी / उपयोगी लगी। बहुत बहुत धन्यवाद।
दएक्सेनोसाइड

एक बहुत बड़ी फ़ाइल की सामग्री को मुद्रित करने के लिए यह मेरे लिए बहुत अच्छा काम किया क्योंकि गेट-कंटेंट cmdlet ने सामग्री को आउट-होस्ट cmdlet में पाइप करने के लिए immedialety शुरू किया।
जर्मन

13
ध्यान दें कि PowerShell ISE में आउट-होस्ट का-पेजिंग पैरामीटर समर्थित नहीं है।
मार्टिन हॉलिंगवर्थ

@BrunoBrant बात नहीं है। आप कुछ भी करने के लिए उत्पादन पाइप सकता है; lessसिर्फ एक बड़ा पाठ दर्शक अनुप्रयोग है जो stdinपाठ के लिए स्वीकार करता है । आप इसे एक अस्थायी फ़ाइल में पाइप कर सकते हैं और इसे खुले में nanoया नीचे की ओर खोल सकते हैं vim! बात नहीं है। PowerShell की तरह है bash(लेकिन बेहतर, imho)। lessमें नहीं है bash; यह एक अलग बाइनरी है। इसलिए आपकी आलोचना मान्य नहीं है।
एलन मैकबी - MSFT

7
इसके अलावा, उत्तर पर टिप्पणी करें: उपनाम ohके लिए है Out-Host, और मापदंडों को संक्षिप्त किया जा सकता है यदि कोई संघर्ष नहीं है, तो कमांड हो सकता हैSome-Cmdlet | oh -p
एलन मैकबी - MSFT

34

dir -rec | more बुरी सलाह है

यह स्क्रीन पर आउटपुट करने से पहले पूरे कमांड का मूल्यांकन करने के लिए पॉवरशेल का कारण होगा, कुछ ऐसा जो आउटपुट पेजिंग जैसी किसी चीज़ के लिए आवश्यक नहीं है

कुछ चरम मामलों में, यह सिस्टम को क्रैश करने का कारण बन सकता है (उदाहरण के लिए dir 'C:\' | more)

दूसरी ओर, out-host -pagingस्क्रीन पर उपलब्ध जानकारी का उपयोग करते हुए यह उपलब्ध होगा।


2
जब आप रिमोट पॉवरशेल का उपयोग करते हैं और एक पेजर के माध्यम से रिमोट विंडोज सर्वर पर एक कमांड को पाइप करना चाहते हैं, out-host -paging तो वांछित के रूप में काम करता है। moreरिमोट कमांड चलाने के दौरान पाइपिंग करने का कोई फायदा नहीं है: पूरा टेक्स्ट एक ही बार में प्रदर्शित होता है।
इलविलाजा

5
के लिए उपनाम out-host -pagingहै oh -pa
जोश

26

Powershell समुदाय एक्सटेंशन एक आसान समारोह 'कम' नाम दिया है कि, एक और अधिक पूरा यूनिक्स शैली सुविधा सेट प्रदान करता है less.exe के पोर्टेड प्रति का उपयोग कर वास्तव में पेजिंग को संभालने के लिए है।

आप इसे व्यवस्थापक शेल शुरू करके और चलाकर स्थापित कर सकते हैं :

Find-Package pscx | Install-Package -Force

( forceपुराने संस्करणों को अपग्रेड करना है)

आप इसे तार को पाइप कर सकते हैं, या फ़ाइलनाम को सीधे मापदंडों के रूप में दे सकते हैं।

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

यह ConEmu और Powershell windows में काम करता है, लेकिन दुर्भाग्य से यह v2.0 ISE के तहत आपके द्वारा अपेक्षित तरीके से काम नहीं करता है।


5
स्थापना कई मूल पॉवरशेल कमांड (gcb, एक्सपेंशन-आर्काइव, फॉर्मेट-हेक्स, गेट-हैश, हेल्प, प्रॉम्प्ट, गेट-क्लिपबोर्ड, गेट-हेल्प, सेट-क्लिपबोर्ड) को ओवरराइड करती है, इसलिए " forceपुराने वर्जन को अपग्रेड करना" लगता है। थोड़ा भ्रामक।
टीएनटी

त्रुटियों या चेतावनियों के बिना वर्तमान उपयोगकर्ता के लिए स्थापित करना:Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
एंड्रियास डिट्रिच

भयानक टिप के लिए धन्यवाद!
रुई क्रेवेइरो

8

मैं "कम" कमांड को "अधिक" कमांड पर पसंद करता हूं। कम आदेश के साथ, परिणाम भी केवल आगे की ओर पीछे की ओर छेड़े जा सकते हैं।

विंडोज के लिए गिट से "कम" मेरे लिए काम करता है (मेरा पथ है C:\Program Files (x86)\Git\usr\less.exe। मेरे पास "कम" के गो संस्करण के साथ पॉवर्सशेल में त्रुटियां थीं ।

उदाहरण:

ls|less

टाइपिंग को बचाने के लिए मैंने अपने पॉवर्सशेल प्रोफाइल में कम के लिए उपनाम "l" जोड़ा:

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


2
मैं भी। पीछे की ओर ताकने के अलावा, कम मुझे परिणाम पर पाठ खोज करने की अनुमति देता है (आगे स्लैश, फिर पाठ टाइप करें, फिर एंटर दबाएं, फिर अगले परिणाम के लिए 'एन', पिछले परिणाम के लिए 'पी')। बहुत, बहुत, सुविधाजनक।
रुई क्रेवेइरो

lessयहां एक और प्रशंसक। लेकिन मुझे यह त्रुटि मिलती है। कोई सुझाव? ________________________________________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, यह less.exe का आधिकारिक Git संस्करण है। क्या आपने कम के gitforwindows.org संस्करण के लिए Git की कोशिश की है ?
जोश

"आउट-होस्ट" का उपयोग करने की आवश्यकता नहीं है। मैं इसका उपयोग करता हूं: "Get-Content tmpf | C: \ cygwin64 \ bin \ less.exe"
कॉन्स्टेंटिनो क्रोनमबर्गर

1
यह $ env: PAGER = "C: \ cygwin64 \ bin \ less.exe" सेट करने के लिए एक बहुत अच्छा विचार है, इसलिए इसका उपयोग उदाहरण के लिए किया जाएगा जब आप "सहायता" टाइप करेंगे
कॉन्स्टेंटिनो क्रोनमबर्गर


3

moreकरने के लिए इस्तेमाल नहीं कर रहा है सीमा उत्पादन, यह करने के लिए प्रयोग किया जाता है पृष्ठ पर अंक लगाना उत्पादन और यह आसान अगर कुछ भी, एक टर्मिनल में पढ़ा जा सकता है।

क्या आप उपयोग करने के बारे में बात कर रहे हैं headऔर tail? EggHeadCafe का एक उदाहरण है:

type my.txt | select-object -first 10

type my.txt | select-object -last 10

अनुकरण करने के लिए headऔर tail


बड़ी फ़ाइलों के लिए पाइपिंग बेहद धीमी है। बेहतर तरीके (बिल्ट-इन ऑप्शंस) करने headऔर tail
पावरशेल

2

मैंने अपने डिफ़ॉल्ट प्रोफ़ाइल में एक फ़ंक्शन परिभाषा और अन्य नाम जोड़ा %SystemRoot%\system32\windowspowershell\v1.0\profile.ps1

यह फ़ंक्शन ज्यादातर इस ब्लॉग पर आधारित है, Qजबकि पेजिंग करते समय दबाने के लिए अतिरिक्त अपवाद हैंडलिंग के साथ अमन धाली द्वारा इस ब्लॉग प्रविष्टि पर आधारित है ।

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

इसलिए मैं इसे बस कॉल कर सकता हूं dir -r | moreऔर यह पावरशेल की पाइपलाइन के कारण तुरंत पृष्ठांकित आउटपुट शुरू कर देता है (जैसा कि अधिक.com के साथ पूर्ण आउटपुट की प्रतीक्षा करने के लिए विरोध किया गया है)।


1

यदि आपने VIM स्थापित किया है, तो मुझे अच्छी तरह से आनंद मिलता है dir -r | vim -R -। दुर्भाग्य से यह उसी समस्या से ग्रस्त है more(यानी कोई स्ट्रीमिंग नहीं)।


1
cat C:\Temp\test.txt

बिल्ली गेट-कंटेंट के लिए एक उपनाम है - बड़ी फ़ाइलों के साथ आपको टर्मिनल के निचले भाग में अधिक - आउटपुट मिलेगा

आप -वाइट को भी जोड़ सकते हैं

cat C:\Temp\test.txt -wait 

-वाइट टेल का उपयोग करने जैसा है लेकिन यह वास्तव में कमांड को रीफ़्रेश करता है जो आउटपुट को रीफ्रेश करता है

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

ओह = मेजबान


1

मेरे पास वास्तव में यह प्रश्न था (अच्छी तरह से मैं कम चाहता था, अधिक नहीं) और पाया गया कि मेरे लिए काम करने वाले @ रीचर्ड-बरग ने पावरशेल (लेकिन लिनक्स पर नहीं) के लिए नया है, मुझे उस उत्तर से गायब चीजें मिलीं (मेरे लिए) थे: मुझे पहली बार जाने की जरूरत थी:

Find-Package pscx | Install-Package

जो तब "नौगेट पैकेज स्थापित करने" के लिए प्रेरित हुआ। मैंने ऐसा किया, लेकिन फिर
-AllowClobberपैरामीटर का उपयोग करना पड़ा Install-Package

तब कम उपयोग करने के लिए, मुझे यह करना पड़ा:

Set-ExecutionPolicy RemoteSigned

जो सभी ने काम किया :-)


साइट पर आपका स्वागत है। "उत्तर # 24" से आपका क्या मतलब है, यह निश्चित नहीं है। वे संख्या गणना के बजाय वोट (जो बदल सकते हैं) हैं।
मुहौलोमन

आह, मैं देख रहा हूँ ... पहली बार मैंने अतिप्रवाह को ढेर करने के लिए पोस्ट किया है! मेरा मतलब था, मेरे लिए @ रीचर्ड-बरग का जवाब, जो कि स्वीकृत जवाब होता
बिल नयलर

निश्चित नहीं कि मुझे डाउन वोट क्यों मिले? लगता है (मेरे लिए) यह पुष्टि करने के लिए उपयोगी है जब कुछ काम किया है!
बिल नायलर

0

सुझाव: फ़ाइल को एक अस्थायी / डिस्पोजेबल .txt फ़ाइल में डालें, फिर OS को आपके पसंदीदा संपादक को आमंत्रित करें, जो कि .txt एक्सटेंशन से जुड़ा हुआ है।

जाओ-प्रक्रिया | आउट-फ़ाइल temp.txt; । \ Temp.txt

नोट: हर बार जब आप इसका उपयोग करते हैं तो आप किसी भी पहले से मौजूद temp.txt फ़ाइल को अधिलेखित कर देंगे। फ़ाइल नाम बुद्धिमानी से चुनें।

उपरोक्त केवल एक मूल विचार है।
अगला चरण इसे उपनाम या प्रोफाइल फ़ंक्शन आदि का उपयोग करके "अधिक" में बदलना होगा।

HTH, Marcelo Finkielsztein

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.