public/Get-Stack.ps1

<#
.SYNOPSIS
See the items in the cd-extras history stack.
 
.PARAMETER Undo
Show contents of the Undo stack only.
 
.PARAMETER Redo
Show contents of the Redo stack only.
 
.EXAMPLE
# Get contents of both stacks (default)
C:\> cd windows
C:\Windows> cd system32
C:\Windows\System32> cd-
C:\Windows> Get-Stack
 
Name Value
---- -----
Redo C:\windows\System32
Undo C:\
 
.EXAMPLE
# Get indexed contents of undo stack
C:\> cd windows
C:\Windows> cd system32
C:\Windows\system32> Get-Stack -u
 
n Name Path
- ---- ----
0 System32 C:\Windows\system32
1 Windows C:\Windows
2 C:\ C:\
#>

function Get-Stack {

  [OutputType([IndexedPath], ParameterSetName = ('Undo', 'Redo'))]
  [OutputType([System.Collections.Hashtable], ParameterSetName = 'Both')]
  [CmdletBinding(DefaultParameterSetName = 'Both')]
  param(
    [Alias("l", "p", "v")]
    [Parameter(Mandatory = $true, ParameterSetName = 'Undo')]
    [switch] $Undo,

    [Parameter(Mandatory = $true, ParameterSetName = 'Redo')]
    [switch] $Redo
  )

  if ($PSCmdlet.ParameterSetName -eq 'Undo') { IndexPaths $undoStack.ToArray() }
  elseif ($PSCmdlet.ParameterSetName -eq 'Redo') { IndexPaths $redoStack.ToArray() }

  else {
    @{
      Undo = $undoStack
      Redo = $redoStack
    }
  }
}