functions/New-PSDriveHere.ps1

function New-PSDriveHere {
    [cmdletBinding(SupportsShouldProcess = $True, DefaultParameterSetName = 'Folder')]
    [OutputType([System.Management.Automation.PSDriveInfo])]
    [Alias('npsd')]

    param(
        [Parameter(Position = 0)]
        [ValidateScript( { Test-Path $_ })]
        [string]$Path = '.',

        [Parameter(Position = 1, ParameterSetName = 'Name')]
        [ValidateNotNullOrEmpty()]
        [string]$Name,

        [Parameter(ParameterSetName = 'Folder')]
        [switch]$First,

        [Alias('cd')]
        [switch]$SetLocation,

        [Parameter(HelpMessage = 'Pass the new PSDrive object to the pipeline.')]
        [switch]$PassThru
    )

    #tags are used for categorizing the command
    #cmdTags = general
    Write-Verbose "Starting: $($MyInvocation.MyCommand)"
    Write-Verbose "Running under PowerShell version $($PSVersionTable.PSVersion)"

    Write-Verbose "Getting the location for $path"
    #get the specified location
    $location = Get-Item -Path $path

    #did the user specify a name?
    if ($PSCmdlet.ParameterSetName -eq 'Name') {
        Write-Verbose "Defining a new PSDrive with the name $Name."
    } #if $name
    else {
        if ($first) {
            Write-Verbose 'Using the first word in the target location.'
            $pattern = '^\w+'
        }
        else {
            Write-Verbose 'Using the last word in the target location.'
            $pattern = '\w+$'
        }
        #Make sure name contains valid characters. This function
        #should work for all but the oddest named folders.
        if ($location.Name -match $pattern) {
            $name = $matches[0]
        }
        else {
            #The location has something odd about it so bail out
            Write-Warning "$path doesn't meet the criteria"
            break
        }

    } #else using part of folder name

    #verify a PSDrive doesn't already exist
    Write-Verbose "Testing $($name):"

    if (-not (Test-Path -Path "$($name):")) {
        Write-Verbose "Creating PSDrive for $name"
        #a hash table of parameter values to splat to New-PSDrive
        $paramHash = @{
            Name        = $name
            PSProvider  = $location.PSProvider
            Root        = $Path
            Description = "Created $(Get-Date)"
            Scope       = 'Global'
            ErrorAction = 'Stop'
        }

        try {
            $result = New-PSDrive @paramHash
            if ($PassThru) {
                $result
            }
            if ($SetLocation) {
                Write-Verbose "Setting location to $($name):"
                Set-Location -Path "$($name):"
            }
        } #try
        catch {
            Write-Error $_
        }

    } #if Not Test-Path
    else {
        Write-Warning "A PSDrive for $name already exists"
    }

    Write-Verbose "Ending: $($MyInvocation.MyCommand)"

} #function




#EOF