Expand-Command.ps1

# If the command is an alias, this expands it to be the full command
# name. If it's not an alias, it exits untouched.
function Expand-Command {
    [CmdletBinding()]
    [OutputType([string])]
    Param(
        [Parameter(Mandatory = $True, Position = 0)]
        [ValidateNotNullOrEmpty()]
        [string]
        $Command
    )

    $alias = Get-Alias -Name $Command -ErrorAction Ignore
    if (($null -eq $alias) -or ($null -eq $alias.ResolvedCommandName)) {
        Write-Verbose "$Command is not an alias."
        return $Command
    }

    $resolved = $alias.ResolvedCommandName
    $pathext = $Env:PATHEXT
    if ($null -eq $pathext) {
        Write-Verbose "$Command is an alias for $resolved."
        return $resolved
    }

    foreach ($ext in $pathext.Split(';')) {
        if ($resolved.EndsWith($ext, [System.StringComparison]::OrdinalIgnoreCase)) {
            $resolved = $resolved.Substring(0, $resolved.Length - $ext.Length)
            break
        }
    }

    Write-Verbose "$Command is an alias for $resolved."
    return $resolved
}