# encoding: ascii
# api: powershell
# title: Page-Output
# description: This is like a (very simple) “more” script for PowerShell … the problem with it is that you’re paging by a count of objects, not by how many lines of text they’ll output … so the paging doesn’t really work except for format-table output … unless you specify it manually. However, this script provides you with “an option” if you want to have paging and still be able to use a script to color the output based on context or syntax.
# version: 1.1
# type: script
# author: Joel Bennett
# license: CC0
# x-poshcode-id: 175
# x-archived: 2012-12-29T04:47:44
# x-published: 2008-04-15T21:33:00
#
#
## Page (aka More, aka Page-Output)
###################################################################################################
## This is like a (very simple) "more" script for PowerShell ...
## The problem with it is that you're paging by a count of objects, not by how many lines of text
## they'll output ... so the paging doesn't really work except for format-table output ...
## unless you specify it manually.
##
## However, this script provides you with "an option" if you want to have paging and still be able
## to do something like using a script to color the output based on context or syntax:
##
## Simple example:
## ls | Page | % { $_ ; switch( $i++ % 2 ) { 0 { $Host.UI.RawUI.BackgroundColor = "Black" } 1 { $Host.UI.RawUI.BackgroundColor = "DarkGray" } } }
###################################################################################################
## Revision History
## 1.1 - Clean up output (overwrite the prompt)
## - Add option to stop paging (and also to abort)
## 1.0 - Demo script
###################################################################################################
# function Page {
Param( [int]$count=($Host.UI.RawUI.WindowSize.Height-5) )
BEGIN {
$x = 1
$bg = $Host.UI.RawUI.BackgroundColor;
$fg = $Host.UI.RawUI.ForegroundColor;
$page = $true
}
PROCESS {
if($page -and (($x++ % $count) -eq 0)) {
Write-Host "Press a key to continue (or 'A' for all, or 'Q' to quit)..." -NoNew;
$Host.UI.RawUI.FlushInputBuffer();
$ch = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyUp");
switch -regex ($ch.Character){
"a|A" { $page = $false }
"q|Q" { exit }
}
$pos = $Host.UI.RawUI.CursorPosition;
$pos.X = 0;
$Host.UI.RawUI.CursorPosition = $pos;
}
$_
}
END {
# Don't forget to set the colors back...
$Host.UI.RawUI.BackgroundColor = $bg;
$Host.UI.RawUI.ForegroundColor = $fg;
}
#}