Functions/GenXdev.Console/Set-LocationParent4.ps1

################################################################################
<#
.SYNOPSIS
Navigates up four directory levels in the filesystem hierarchy.
 
.DESCRIPTION
Provides a convenient way to move up four directory levels from the current
location in the filesystem. After navigation, displays the contents of the
resulting directory.
 
.EXAMPLE
Set-LocationParent4
 
.EXAMPLE
.....
 
.NOTES
The alias '.....'' represents moving up four parent directories, where each dot
represents one level up.
#>

function Set-LocationParent4 {

    [CmdletBinding(SupportsShouldProcess)]
    [Alias(".....")]
    param()

    begin {

        Write-Verbose "Starting navigation up four directory levels from $(Get-Location)"
    }

    process {

        # navigate up four levels
        for ($i = 1; $i -le 4; $i++) {

            # check if we can move up before attempting
            $parent = Split-Path -Path (Get-Location) -Parent
            if ($null -eq $parent) {
                Write-Verbose "Cannot go up further - at root level"
                break
            }

            # prepare target description for ShouldProcess
            $target = "from '$(Get-Location)' to '$parent' (level $i of 4)"

            # only navigate if ShouldProcess returns true
            if ($PSCmdlet.ShouldProcess($target, "Change location")) {
                Set-Location -Path $parent
            }
            else {
                # exit the loop if user declined
                break
            }
        }

        # show contents of the new current directory if not in WhatIf mode
        if (-not $WhatIfPreference -and (Get-Location).Provider.Name -eq 'FileSystem') {
            Get-ChildItem
        }
    }

    end {

        Write-Verbose "Completed navigation. New location: $PWD"
    }
}
################################################################################