Equivalent of 'more' or 'less' command in Powershell?

Powershell

Powershell Problem Overview


Is there a way to paginate output by piping it to a more or less command, similar to those that are available in Linux\Unix shells?

Powershell Solutions


Solution 1 - Powershell

Yes there is:

some-cmdlet | out-host -paging

Solution 2 - Powershell

Well... There is "more", which is more or less (...) the same you'd expect from other platforms. Try the following example:

dir -rec | more

Solution 3 - Powershell

dir -rec | more is bad advice.

It will cause powershell to evaluate the entire command prior to outputting it to the screen, something that is not needed for something like output paginating

In some extreme cases, it could cause the system to crash (e.g. dir 'C:\' | more)

On the other hand, using out-host -paging will output information to the screen as it is available.

Solution 4 - Powershell

The Powershell Community Extensions have a handy function named 'less' that provides a more complete Unix-style feature set, using a ported copy of less.exe to actually handle the paging.

You can install it by starting an admin shell and running:

Find-Package pscx | Install-Package -Force

(the force is to upgrade older versions)

You can pipe strings to it, or give filenames as direct parameters.

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

It works in ConEmu and Powershell windows, but unfortunately it doesn't work the way you'd expect under the v2.0 ISE.

Solution 5 - Powershell

I prefer the "less" command over the "more" command. With the less command, results can also be paged backwards instead of just forwards.

The "less" from Git for Windows works for me*

To save typing I added the alias "l" for less in my Powershell profile (notepad $profile):

Set-Alias -Name "l" -Value "${env:ProgramFiles(x86)}\Git\bin\less.exe"

Look for less either in the above path or C:\Program Files\Git\usr\bin\less.exe or similar.


*: I had errors in Powershell with the Gow version of "less".

Solution 6 - Powershell

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

Solution 7 - Powershell

more isn't used to limit output, it's used to paginate output and make it easier to read in a terminal, if anything.

Are you talking about using head and tail? EggHeadCafe has an example of:

type my.txt | select-object -first 10

type my.txt | select-object -last 10

to emulate head and tail.

Solution 8 - Powershell

I added a function definition and alias to my default profile at %SystemRoot%\system32\windowspowershell\v1.0\profile.ps1

This function is mostly based on this blog entry by Aman Dhally with added exception handling for pressing Q while 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

so I can just call it like dir -r | more and it immediately starts paged output because of PowerShell's pipeline (as opposed to waiting for the complete output with more.com).

Solution 9 - Powershell

cat C:\Temp\test.txt

cat is an alias for Get-Content - with larger files you will get the -- More -- output at the bottom of the terminal

You can also you can add -wait

cat C:\Temp\test.txt -wait 

-wait is like using tail but it actually is rerunning the command just refreshing the output

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

oh = Out-Host

Solution 10 - Powershell

If you have VIM installed, I thoroughly enjoy dir -r | vim -R -. Unfortunately this suffers the same problem with more (ie. no streaming).

Solution 11 - Powershell

I had exactly this question (well I wanted less, not more) and found the answer of @richard-berg worked for me, being new to PowerShell (but not to Linux), I found the things missing from that answer (for me) were: I first needed to go:

Find-Package pscx | Install-Package

which then prompted for "installing nuget package". I did this but then had to use the
-AllowClobber parameter on Install-Package.

then in order to use less, I had to:

Set-ExecutionPolicy RemoteSigned

which all worked :-)

Solution 12 - Powershell

Suggestion: Put the file into a temporary/disposable .txt file, then let the OS invoke your favorite editor, the one that is linked to the .txt extension.

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

Note: each time you use this you will overwrite any pre-existent temp.txt file. Pick the file name wisely.

The above is just a basic idea.
Next step would be transforming this into "| more" using aliases or profile functions, etc.

HTH, Marcelo Finkielsztein

Solution 13 - Powershell

The easiest thing to do in my opinion is to use Scoop to install anything you're used to using from UNIX. Once you do, just run scoop install less and you're good to go.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionValentin VView Question on Stackoverflow
Solution 1 - PowershellShay LevyView Answer on Stackoverflow
Solution 2 - PowershellJouni HeikniemiView Answer on Stackoverflow
Solution 3 - PowershellXavier ChorinView Answer on Stackoverflow
Solution 4 - PowershellRichard BergView Answer on Stackoverflow
Solution 5 - PowershellJoshView Answer on Stackoverflow
Solution 6 - PowershellBimoView Answer on Stackoverflow
Solution 7 - PowershellMark RushakoffView Answer on Stackoverflow
Solution 8 - PowershelloleschriView Answer on Stackoverflow
Solution 9 - PowershellTerminal BashView Answer on Stackoverflow
Solution 10 - PowershellmvanleView Answer on Stackoverflow
Solution 11 - PowershellBill NaylorView Answer on Stackoverflow
Solution 12 - PowershellMarcelo FinkiView Answer on Stackoverflow
Solution 13 - PowershellkjohnsenView Answer on Stackoverflow