Functions/GenXdev.Console/Set-LocationParent5.ps1

################################################################################
<#
.SYNOPSIS
Navigates up five directory levels in the file system hierarchy.
 
.DESCRIPTION
Changes the current working directory by moving up five parent directory levels
and displays the contents of the resulting directory. This function provides a
convenient shorthand alias '......' for quick navigation.
 
.EXAMPLE
Set-LocationParent5
 
.EXAMPLE
......
#>

function Set-LocationParent5 {

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

    param (
        ########################################################################
    )

    begin {

        Write-Verbose "Starting directory navigation up 5 levels from: $PWD"
    }

    process {

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

        # try to navigate up 5 levels
        try {
            for ($i = 1; $i -le 5; $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 {

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