During a recent PowerShell training class we naturally covered aliases. An alias is simply an alternate name, often something that is shorter to type, or maybe even more meaningful. There are aliases for commands, properties and parameters. Discovering aliases for commands is pretty easy with Get-Alias. Property aliases are discoverable using Get-Member. But, discovering parameter aliases is a bit more difficult. The information is there, but doesn't surface very well. It would be terrific if help showed parameter aliases but it rarely does. So here are some ways you might find parameter aliases.
ManageEngine ADManager Plus - Download Free Trial
Exclusive offer on ADManager Plus for US and UK regions. Claim now!
One way is to use Get-Help.
PS C:\> get-help get-process -Parameter * | where {$_.aliases} | select name,aliases name aliases ---- ------- ComputerName Cn FileVersionInfo FV,FVI Id PID Name ProcessName
But you need to use Get-Help. If you use the Help function it won't work. In the command I filtered out parameters that didn't have aliases. You can also pipe Get-Command to Get-Help.
PS C:\> get-command get-process | get-help -Parameter * | where {$_.aliases} | select name,aliases name aliases ---- ------- ComputerName Cn FileVersionInfo FV,FVI Id PID Name ProcessName
But for some reason, this doesn't always work. There are aliases for Get-Service, but these same commands fail to show it.
PS C:\> get-help get-service -Parameter * | where {$_.aliases} | select name,aliases PS C:\> get-command get-service | get-help -Parameter * | where {$_.aliases} | select name,aliases
I know there are aliases because Get-Command shows me, although it takes a little work to extract this information.
PS C:\> (get-command get-service).parameters.getenumerator() | foreach {$_.value} | Select Name,Alia ses Name Aliases ---- ------- Name {ServiceName} ComputerName {Cn} DependentServices {DS} RequiredServices {SDO, ServicesDependedOn} DisplayName {} Include {} Exclude {} InputObject {} ErrorAction {ea} WarningAction {wa} Verbose {vb} Debug {db} ErrorVariable {ev} WarningVariable {wv} OutVariable {ov} OutBuffer {ob} PipelineVariable {pv}
Plus I can verify at the prompt:
PS C:\> get-service wuauserv -cn $hvr2 -sdo Status Name DisplayName ------ ---- ----------- Running rpcss Remote Procedure Call (RPC)
Since it appears I can always get the information from Get-Command, I wrote a function called Get-ParameterAlias.
#requires -version 3.0 Function Get-ParameterAlias { <# .SYNOPSIS List command parameter aliases .DESCRIPTION This command will display all of the parameter aliases for a given command or alias. It isn't always easy to discover parameter aliases. Many are not documented on cmdlet help. But they can be discovered by digging into the output from Get-Command. Specify a command or alias or pipe results from Get-Command to this command. By default, common parameters such as ErrorAction, or omitted unless you use -IncludeCommon .EXAMPLE PS C:\> get-parameteralias invoke-command Command Name Aliases ------- ---- ------- Invoke-Command ComputerName {Cn} Invoke-Command ConnectionUri {URI, CU} Invoke-Command InDisconnectedSession {Disconnected} Invoke-Command HideComputerName {HCN} Invoke-Command ScriptBlock {Command} Invoke-Command FilePath {PSPath} Invoke-Command ArgumentList {Args} .EXAMPLE PS C:\> get-command dir | Get-ParameterAlias Command Name Aliases ------- ---- ------- Invoke-Command ComputerName {Cn} Invoke-Command ConnectionUri {URI, CU} Invoke-Command InDisconnectedSession {Disconnected} Invoke-Command HideComputerName {HCN} Invoke-Command ScriptBlock {Command} Invoke-Command FilePath {PSPath} Invoke-Command ArgumentList {Args} .NOTES Last Updated: 2/11/2014 Version : 0.9 Learn more: PowerShell in Depth: An Administrator's Guide (http://www.manning.com/jones2/) PowerShell Deep Dives (http://manning.com/hicks/) Learn PowerShell 3 in a Month of Lunches (http://manning.com/jones3/) Learn PowerShell Toolmaking in a Month of Lunches (http://manning.com/jones4/) **************************************************************** * DO NOT USE IN A PRODUCTION ENVIRONMENT UNTIL YOU HAVE TESTED * * THOROUGHLY IN A LAB ENVIRONMENT. USE AT YOUR OWN RISK. IF * * YOU DO NOT UNDERSTAND WHAT THIS SCRIPT DOES OR HOW IT WORKS, * * DO NOT USE IT OUTSIDE OF A SECURE, TEST SETTING. * **************************************************************** .LINK Get-Command .LINK https://jdhitsolutions.com/blog/2014/02/get-powershell-parameter-aliases .INPUTS [String] or [System.Management.Automation.CmdletInfo] or [System.Management.Automation.AliasInfo] .OUTPUTS [System.Management.Automation.ParameterMetadata] #> [cmdletbinding()] Param( [Parameter(Position=0,Mandatory=$True, HelpMessage="Enter a command or cmdlet name", ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)] [ValidateNotNullorEmpty()] [Alias("command")] [object]$Name, [Switch]$IncludeCommon ) Begin { Write-Verbose "Starting $($MyInvocation.mycommand)" if ($IncludeCommon) { $common=$Null } else { #define common parameter names. PipelineVariable was added in v4. $common= "Verbose","Debug","ErrorAction","WarningAction", "ErrorVariable","WarningVariable","OutVariable","OutBuffer", "Whatif","Confirm","PipelineVariable" } } #begin Process { Try { #test if piped in object is already a command info object if ($Name -is [System.Management.Automation.CmdletInfo]) { Write-Verbose "Processing a command" $parameters = $name.Parameters $commandname= $name.Name } elseif ($Name -is [System.Management.Automation.AliasInfo]) { Write-Verbose "Processing an alias" $parameters = $name.Parameters $commandname= $name.ResolvedCommand } else { #must be a string so get the command Write-Verbose "Getting command information for $Name" $command = Get-Command $Name -ErrorAction "Stop" $commandname= $command.Name $parameters = $command.parameters } } #try Catch { Write-Warning "Failed to find command $Name. $($_.Exception.message)" #bail out Return } Write-Verbose "Analyzing $CommandName" if ($parameters) { $parameters.GetEnumerator() | where {$_.key -notin $common} | foreach { #get parameters with aliases $_.value | where {$_.Aliases} | Select @{Name="Command";Expression={$CommandName}},Name,Aliases } } #if parameters found } #process End { Write-Verbose "Ending $($MyInvocation.mycommand)" } #end } #end function #set an optional alias Set-Alias -Name gpa -value Get-ParameterAlias
The function can take a command name or you can pipe something from Get-Command.
PS C:\> Get-ParameterAlias get-wmiobject Command Name Aliases ------- ---- ------- Get-WmiObject Class {ClassName} Get-WmiObject ComputerName {Cn} Get-WmiObject Namespace {NS} PS C:\> get-command get-service | get-parameteralias Command Name Aliases ------- ---- ------- Get-Service Name {ServiceName} Get-Service ComputerName {Cn} Get-Service DependentServices {DS} Get-Service RequiredServices {SDO, ServicesDependedOn}
Because parameter information from Get-Command includes common parameters such as -ErrorAction, I've skipped those by default, unless you use the -IncludeCommon parameter.
Now it is easy to discover parameter aliases for say a module.
get-command -module hyper-v | get-parameteralias | out-gridview -title "Hyper-V Aliases"
Knowing parameter aliases can make you more efficient in the console. But remember, when committing PowerShell to a script use the full parameter name as some of these aliases can be a bit cryptic.
As always, I hope you'll let me know what you think.
2 thoughts on “Get PowerShell Parameter Aliases”
Comments are closed.