This post is the help rewrite for about_Aliases. While the help files for Windows PowerShell are invaluable, the idea behind a rewrite is so true beginners might even better understand the help file concepts. At times, some things discussed in the Windows PowerShell help file will not be included in a help rewrite. Therefore, it is always best to read the actual help file after reading this post. (PS3.0)
An Alias in Windows PowerShell is a simplified, or quicker, way to type a cmdlet using an alternate name. Get-Alias
(or the alias for Get-Alias
, gal
) will display a list of all of the aliases that the Windows PowerShell session knows about. This includes both built-in aliases and any additional aliases created or imported. The first two examples below, indicate two ways to accomplish the same thing–listing all the aliases. These examples only show the first four results.
PS C:\> Get-Alias CommandType Name ModuleName ----------- ---- ---------- Alias % -> ForEach-Object Alias ? -> Where-Object Alias ac -> Add-Content Alias asnp -> Add-PSSnapin
This example uses the alias for the Get-Alias
cmdlet, gal
.
PS C:\> gal CommandType Name ModuleName ----------- ---- ---------- Alias % -> ForEach-Object Alias ? -> Where-Object Alias ac -> Add-Content Alias asnp -> Add-PSSnapin
To find the cmdlet associated with a single alias, the alias needs to be provided, as the value for the -Name
parameter, to the Get-Alias
cmdlet.
PS C:\> gal -Name gc CommandType Name ModuleName ----------- ---- ---------- Alias gc -> Get-Content
The name parameter (-Name
) is not required to use it. This means that if there is something after the Get-Alias
cmdlet, such as gc
in this example, then it will default to using the -Name
parameter.
PS C:\> gal gc CommandType Name ModuleName ----------- ---- ---------- Alias gc -> Get-Content
Windows PowerShell will error if the -Name
parameter is supplied with a cmdlet name or another value that is not an alias.
PS C:\> gal Get-Content
gal : This command cannot find a matching alias because an alias with the name ‘Get-Content’ does not exist.
At line:1 char:1
+ gal Get-Content
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-Content:String) [Get-Alias], ItemNotFoundException
+ FullyQualifiedErrorId : ItemNotFoundException,Microsoft.PowerShell.Commands.GetAliasCommand
In order to get an alias (or aliases, if there is more than one) for a cmdlet, the -Definition
parameter must be used.
PS C:\> gal -Definition Get-Content CommandType Name ModuleName ----------- ---- ---------- Alias cat -> Get-Content Alias gc -> Get-Content Alias type -> Get-Content
The Get-Service
cmdlet returns the computer’s services, the Get-Process
cmdlet returns the processes running on the computer, and the Get-ChildItem
cmdlet returns the directories and/or files from the root of a drive or from a folder. Here is how a user can get the aliases for multiple cmdlets at the same time.
PS C:\> gal -Definition Get-Service,Get-Process,Get-ChildItem CommandType Name ModuleName ----------- ---- ---------- Alias gsv -> Get-Service Alias gps -> Get-Process Alias ps -> Get-Process Alias dir -> Get-ChildItem Alias gci -> Get-ChildItem Alias ls -> Get-ChildItem
There are a few other cmdlets that allow a user to work with aliases. By using the Get-Command
cmdlet (or its alias–if it has one), additional cmdlets can be returned that all end with -Alias
.
PS C:\> Get-Command *-Alias CommandType Name ModuleName ----------- ---- ---------- Cmdlet Export-Alias Microsoft.PowerShell.Utility Cmdlet Get-Alias Microsoft.PowerShell.Utility Cmdlet Import-Alias Microsoft.PowerShell.Utility Cmdlet New-Alias Microsoft.PowerShell.Utility Cmdlet Set-Alias Microsoft.PowerShell.Utility
Export-Alias
: Exports information about currently defined aliases to a file.
PS C:\> Export-Alias -Path 'C:\aliases.txt'
Import-Alias
: Imports an alias, or aliases, from a file.
PS C:\> Import-Alias -Path 'C:\ImportedAliases.txt'
Trying to import aliases that already exist will cause an error for every alias Windows PowerShell tries to import (that already exists).
PS C:\> Export-Alias -Path 'C:\aliases.txt' PS C:\> Import-Alias -Path 'C:\aliases.txt'
Import-Alias : The alias is not allowed, because an alias with the name ‘ac’ already exists.
At line:1 char:1
+ Import-Alias -Path ‘C:\aliases.txt’
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceExists: (ac:String) [Import-Alias], SessionStateException
+ FullyQualifiedErrorId : AliasAlreadyExists,Microsoft.PowerShell.Commands.ImportAliasCommand
New-Alias
: Creates a new alias.
Set-Alias
: Changes an existing alias, or creates an alias if it does not already exist.
PS C:\> New-Alias -Name MyAlias -Value Get-Process PS C:\> MyAlias | select -First 4 Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 224 19 3440 772 110 16.50 4612 ALMon 164 14 2476 2108 44 5.36 2744 ALsvc 77 9 1336 5288 75 137.55 4076 ApMsgFwd 90 8 1372 5788 76 162.11 4324 ApntEx PS C:\> Set-Alias -Name MyAlias -Value Get-Service PS C:\> MyAlias | select -First 4 Status Name DisplayName ------ ---- ----------- Running AdobeARMservice Adobe Acrobat Update Service Stopped AdobeFlashPlaye... Adobe Flash Player Update Service Stopped AeLookupSvc Application Experience Stopped ALG Application Layer Gateway Service
Bonus Information
Use the Measure-Object
cmdlet, or the count property, to find out how many aliases Windows PowerShell knows about.
PS C:\> Get-Alias | Measure-Object Count : 182 Average : Sum : Maximum : Minimum : Property : PS C:\> gal | measure Count : 182 Average : Sum : Maximum : Minimum : Property : PS C:\> (gal | measure).count 182 PS C:\> (gal).count 182
Real World
While aliases are helpful in the console, the belief is that they should not be used in a script file (.ps1 file). Using full cmdlet names in a script is preferred for script readability. There are plenty of people writing Windows PowerShell who adhere to this best practice even while using aliases for the object cmdlets (select for Select-Object
, where for Where-Object
, etc.).
Learn More
This information, and more, are stored in the help file about_Aliases
that comes with Windows PowerShell. This information can be read by typing any of the commands below. The first example will display the help file in the Windows PowerShell console, the second example will open the full help in its own window, and the third example will send the contents of the help file to the clipboard (so it can be pasted into Word, Notepad, etc.), and the fourth example will open the help file in Notepad.
PS C:\> Get-Help about_aliases PS C:\> Get-Help about_aliases -ShowWindow PS C:\> Get-Help about_aliases | clip PS C:\> Notepad C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_Aliases.help.txt
There is a built-in, automatic variable $PSHOME
that stores the installation path of Windows PowerShell. This means that the third example above could have been partially written using that variable.
PS C:\> Notepad $PSHOME\en-us\about_Aliases.help.txt