ConvertFrom-Alias.ps1

#requires -version 2.0

Function ConvertFrom-Alias {

Param (
    [Parameter(Position=0)]
    [ValidateNotNullorEmpty()]
    $Text=$psISE.CurrentFile.Editor.text
)

#make sure we are using the ISE
if ($host.name -match "ISE"){

#Turn the script into syntax tokens
Write-Verbose "Tokenizing"

#verify there are no syntax errors first by Tokenizing the script
$out=$null
$tokens = [System.Management.Automation.PSparser]::Tokenize($text, [ref]$out)

#if there are errors they will be directed to $out
if ($out) {
    #enumerate each parsing error in $out
    foreach ($problem in $out) {
        Write-Warning $problem.message
        Write-Warning "Line: $($problem.Token.Startline) at character: $($problem.token.StartColumn)"
    }
}
else {
    #if no errors then proceed to convert
    $tokens | Where-Object { $_.Type -eq 'Command'} | 
    Sort-Object StartLine, StartColumn -Descending |
      ForEach-Object {
          #handle the ? by escaping it
          if($_.content -eq '?') {
            Write-Verbose "Found a ?"
            $result = Get-Command -name '`?' -CommandType Alias
          } 
          else {
            $result = Get-Command -name $_.Content -CommandType Alias -ErrorAction SilentlyContinue
          }

          #check and see if Get-Command returned anything
          if($result) {
            #find each command and insert the corresponding command definition
            Write-Verbose "Replacing $($result.name) with $($result.definition)"
            $psISE.CurrentFile.Editor.Select($_.StartLine,$_.StartColumn,$_.EndLine,$_.EndColumn)
            $psISE.CurrentFile.Editor.InsertText($result.Definition)
          }
      } #foreach
 } #else $tokens exists and there were no parsing errors
} #if ISE
else {
    Write-Warning "You must be using the PowerShell ISE"
}

Write-Verbose "Finished"

} #end Function