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()]
    [Alias(".....")]
    param()

    begin {

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

    process {

        # store initial location to revert if needed
        $initialLocation = Get-Location

        # try to navigate up 4 levels
        try {
            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
                }

                # attempt to change directory
                Set-Location -Path $parent -ErrorAction Stop
            }

            # display contents only if in filesystem
            if ((Get-Location).Provider.Name -eq 'FileSystem') {
                Get-ChildItem
            }
        }
        catch {
            # revert to initial location on error
            Set-Location -Path $initialLocation
            Write-Warning "Unable to navigate up: $($_.Exception.Message)"
        }
    }

    end {
    }
}
################################################################################