Location Tricks with PowerShell
I'm sure it comes as no surprise to you that I spend a lot of time at a PowerShell prompt. I am always looking for ways to minimize the amount of typing I have to do and to be as efficient as possible. Lately, I've been thinking about locations in PowerShell and how to get the most out of them. I have a few ideas I want to share with you.
Provider Aware Prompt
My first tip is a customized prompt function that is provider-aware. This function will display the current location in an associated color style based on the underlying provider.
PS C:\work> Get-Location | Format-List *
Drive        : C
Provider     : Microsoft.PowerShell.Core\FileSystem
ProviderPath : C:\work
Path         : C:\work
PS C:\work> cd hklm:\SOFTWARE\Microsoft\
PS HKLM:\SOFTWARE\Microsoft\> Get-Location | Select-Object Provider
Provider
--------
Microsoft.PowerShell.Core\Registry
My prompt will display the current location in a different color depending on the provider. I'm also testing if I am running in an elevated session on Windows.
$AdminFG = "Gray"
If ($IsWindows -OR ($PSEdition -eq 'desktop')) {
    $user = [Security.Principal.WindowsIdentity]::GetCurrent()
    If ( (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
        $AdminFG = 'Red'
    }
}
I set an initial value for $AdminFG. On Windows, I could have used the default foreground color, $host.UI.RawUI.ForegroundColor. However, on non-Windows systems, this isn't defined so I'll explicitly set a console color value.
My sample prompt is a variation on the default prompt function.
Function prompt {
    # .Description
    # This custom version of the PowerShell prompt will present a colorized location value based on the current provider. It will also display the PS prefix in red if the current user is running as administrator.
    # .Link
    # https://go.microsoft.com/fwlink/?LinkID=225750
    # .ExternalHelp System.Management.Automation.dll-help.xml
    #Non-Windows PowerShell hosts don't have a ForegroundColor defined
    $AdminFG = "Gray" #or use default $host.UI.RawUI.ForegroundColor
    If ($IsWindows -OR ($PSEdition -eq 'desktop')) {
        $user = [Security.Principal.WindowsIdentity]::GetCurrent()
        If ( (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
            $AdminFG = 'Red'
        }
    }
    #As an alternative you could use $PSStyle
    Switch ((Get-Location).provider.name) {
        'FileSystem' { $fg = 'green' }
        'Registry' { $fg = 'magenta' }
        'wsman' { $fg = 'cyan' }
        'Environment' { $fg = 'yellow' }
        'Certificate' { $fg = 'DarkCyan' }
        'Function' { $fg = 'blue' }
        'Alias' { $fg = 'DarkGray' }
        'Variable' { $fg = 'DarkGreen' }
        Default { $fg = 'Gray' }
    }
    Write-Host "[$(Get-Date -Format 'hh\:mm\:ss\.ffff')] " -NoNewline
    Write-Host 'PS ' -NoNewline -ForegroundColor $AdminFG
    Write-Host "$($executionContext.SessionState.Path.CurrentLocation.Path)" -ForegroundColor $fg -NoNewline
    Write-Output "$('>' * ($nestedPromptLevel + 1)) "
}
This function will display the current location in a color that corresponds to the provider. It will also display the PS prefix in red if the current user is running as an administrator.
Figure 1 shows a sample of the prompt in action:

This won't rock your world, but it might be nice to have a little cue at your prompt. If you have an existing prompt function, you might want to incorporate some of my ideas.
The other location-related topic I'm working on is related to jump lists. That is, making it even easier to jump to previous locations.
