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.