Public/alias.ps1

function alias {
    [CmdletBinding()]
    # pull together all the args and then split on =
    $alias, $cmd = [string]::join(" ", $args).split("=", 2) | ForEach-Object { $_.trim()}
    $cmd = Resolve-Aliases $cmd
    if ((Get-Item "function:\Alias$Alias" -ErrorAction SilentlyContinue)) {
        Write-Host "Alias ($alias) exists, please remove first. ( unalias $alias ) ."
        return
    }
    $f = New-Item -Path function: -Name "Global:Alias$Alias" -Options "AllScope" -Value @"
Invoke-Expression '$cmd `@args '
    ###ALIAS###
"@

    Write-Verbose $f
    # Invoke-Expression '$cmd `$args'
    $a = Set-Alias -Name $Alias -Value "Alias$Alias" -Description "A UNIX-style alias using functions" -Option "AllScope" -scope Global -passThru
    Write-Verbose $a
}