# encoding: ascii
# api: powershell
# title: Get-ParameterAlias.ps1
# description: From Windows PowerShell Cookbook (O’Reilly) by Lee Holmes
# version: 0.1
# author: Lee Holmes
# license: CC0
# x-poshcode-id: 2160
# x-archived: 2016-03-18T23:47:43
# x-published: 2011-09-09T21:41:00
#
#
##############################################################################
##
## Get-ParameterAlias
##
## From Windows PowerShell Cookbook (O'Reilly)
## by Lee Holmes (http://www.leeholmes.com/guide)
##
##############################################################################
<#
.SYNOPSIS
Looks in the session history, and returns any aliases that apply to
parameters of commands that were used.
.EXAMPLE
PS >dir -ErrorAction SilentlyContinue
PS >Get-ParameterAlias
An alias for the 'ErrorAction' parameter of 'dir' is ea
#>
Set-StrictMode -Version Latest
## Get the last item from their session history
$history = Get-History -Count 1
if(-not $history)
{
return
}
## And extract the actual command line they typed
$lastCommand = $history.CommandLine
## Use the Tokenizer API to determine which portions represent
## commands and parameters to those commands
$tokens = [System.Management.Automation.PsParser]::Tokenize(
$lastCommand, [ref] $null)
$currentCommand = $null
## Now go through each resulting token
foreach($token in $tokens)
{
## If we've found a new command, store that.
if($token.Type -eq "Command")
{
$currentCommand = $token.Content
}
## If we've found a command parameter, start looking for aliases
if(($token.Type -eq "CommandParameter") -and ($currentCommand))
{
## Remove the leading "-" from the parameter
$currentParameter = $token.Content.TrimStart("-")
## Determine all of the parameters for the current command.
(Get-Command $currentCommand).Parameters.GetEnumerator() |
## For parameters that start with the current parameter name,
Where-Object { $_.Key -like "$currentParameter*" } |
## return all of the aliases that apply. We use "starts with"
## because the user might have typed a shortened form of
## the parameter name.
Foreach-Object {
$_.Value.Aliases | Foreach-Object {
"Suggestion: An alias for the '$currentParameter' " +
"parameter of '$currentCommand' is '$_'"
}
}
}
}