cmdlet 的名称由一个动词和一个名词组成,其功能对用户来讲一目了然。但是对于一个经常使用powershell命令的人每天敲那么多命令也很麻烦啊。能不能把命令缩短一点呢?于是“别名”就应运而生了。Powershell内部也实现了很多常用命令的别名。例如Get-ChildItem,列出当前的子文件或目录。它有两个别名:ls 和 dir,这两个别名来源于unix 的shell和windows的cmd。
因此别名有两个作用:
- 继承:继承unix-shell和windows-cmd。
- 方便:方便用户使用。
查询别名
查询别名所指的真实cmdlet命令
PS C:\PS> Get-Alias -name lsCommandType Name Definition----------- ---- ----------Alias ls Get-ChildItemPS C:\PS> Get-Alias -name dirCommandType Name Definition----------- ---- ----------Alias dir Get-ChildItemPS C:\PS> Get-Alias -name flCommandType Name Definition----------- ---- ----------Alias fl Format-ListPS C:\PS> Get-Alias -name ftCommandType Name Definition----------- ---- ----------Alias ft Format-Table
查看可用的别名
查看可用的别名,可以通过” ls alias:” 或者 ”Get-Alias“
如何查看所有以Remove打头的cmdlet的命令的别名呢?
PS C:\PS> dir alias: | where {$_.Definition.Startswith("Remove")}CommandType Name Definition----------- ---- ----------Alias del Remove-ItemAlias erase Remove-ItemAlias rbp Remove-PSBreakpointAlias rd Remove-ItemAlias rdr Remove-PSDriveAlias ri Remove-ItemAlias rjb Remove-JobAlias rm Remove-ItemAlias rmdir Remove-ItemAlias rmo Remove-ModuleAlias rp Remove-ItemPropertyAlias rsn Remove-PSSessionAlias rsnp Remove-PSSnapinAlias rv Remove-VariableAlias rwmi Remove-WMIObject
说明:dir alias:获取的是别名的数组,通过where对数组元素进行遍历,$_代表当前元素,alias的Definition为String类型,因为powershell支持.net,.net中的string类有一个方法Startswith。通过where过滤集合在powershell中使用非常广泛。
有的cmdlet命令可能有2-3个别名,我们可以通过下面的命令查看所有别名和指向cmdlet的别名的个数。
PS C:\PS> ls alias: | Group-Object definition | sort -Descending CountCount Name Group----- ---- -----6 Remove-Item {del, erase, rd, ri...}3 Set-Location {cd, chdir, sl}3 Get-History {ghy, h, history}3 Get-ChildItem {dir, gci, ls}3 Get-Content {cat, gc, type}3 Move-Item {mi, move, mv}3 Copy-Item {copy, cp, cpi}2 Start-Process {saps, start}2 Set-Variable {set, sv}2 Write-Output {echo, write}2 Get-Process {gps, ps}2 Invoke-History {ihy, r}2 New-PSDrive {mount, ndr}2 Stop-Process {kill, spps}2 Rename-Item {ren, rni}2 Get-Location {gl, pwd}2 Compare-Object {compare, diff}2 Where-Object {?, where}2 ForEach-Object {%, foreach}2 Clear-Host {clear, cls}1 Out-Host {oh}1 New-PSSession {nsn}1 New-Variable {nv}1 Out-GridView {ogv}1 Pop-Location {popd}1 Tee-Object {tee}1 Remove-PSBreakpoint {rbp}1 Receive-Job {rcjb}1 Push-Location {pushd}1 mkdir {md}1 Measure-Object {measure}1 help {man}1 Remove-PSSnapin {rsnp}1 Out-Printer {lp}1 New-Item {ni}1 New-Module {nmo}1 New-Alias {nal}1 Move-ItemProperty {mp}1 Wait-Job {wjb}1 Remove-PSDrive {rdr}1 Start-Service {sasv}1 Set-PSBreakpoint {sbp}1 Set-ItemProperty {sp}1 Start-Job {sajb}1 Set-Alias {sal}1 Start-Sleep {sleep}1 Set-Item {si}1 Select-Object {select}1 Set-Content {sc}1 Sort-Object {sort}1 Remove-WMIObject {rwmi}1 Remove-Module {rmo}1 Rename-ItemProperty {rnp}1 Stop-Service {spsv}1 Set-WMIInstance {swmi}1 Remove-Job {rjb}1 Remove-Variable {rv}1 Resolve-Path {rvpa}1 Stop-Job {spjb}1 Remove-ItemProperty {rp}1 Remove-PSSession {rsn}1 Exit-PSSession {exsn}1 Format-Custom {fc}1 Enter-PSSession {etsn}1 Export-Csv {epcsv}1 Export-PSSession {epsn}1 Format-List {fl}1 Get-PSBreakpoint {gbp}1 Get-Command {gcm}1 Get-Alias {gal}1 Format-Table {ft}1 Format-Wide {fw}1 Export-Alias {epal}1 Clear-History {clhy}1 Clear-Item {cli}1 Clear-Content {clc}1 Add-Content {ac}1 Add-PSSnapIn {asnp}1 Clear-ItemProperty {clp}1 Disable-PSBreakpoint {dbp}1 Enable-PSBreakpoint {ebp}1 Convert-Path {cvpa}1 Clear-Variable {clv}1 Copy-ItemProperty {cpp}1 Invoke-Expression {iex}1 Invoke-Item {ii}1 Invoke-Command {icm}1 Get-Variable {gv}1 Get-WmiObject {gwmi}1 Import-Alias {ipal}1 powershell_ise.exe {ise}1 Invoke-WMIMethod {iwmi}1 Import-PSSession {ipsn}1 Import-Csv {ipcsv}1 Import-Module {ipmo}1 Get-Unique {gu}1 Get-Job {gjb}1 Get-Member {gm}1 Get-Item {gi}1 Get-PSCallStack {gcs}1 Get-PSDrive {gdr}1 Get-Module {gmo}1 Get-PSSnapIn {gsnp}1 Get-Service {gsv}1 Get-PSSession {gsn}1 Get-ItemProperty {gp}1 Group-Object {group}
通过简写查看全部别名:
PS C:\PS> gal
查看指定别名对应的命令:
PS C:\PS> gal ls
创建自己的别名
给记事本创建一个别名,并查看该别名;
PS C:\PS> Set-Alias -Name Edit -Value notepadPS C:\PS> EditPS C:\PS> $alias:Editnotepad
也可以通过以下形式创建别名(不带-Name和-Value):
Set-Alias edit notepad
删除自己的别名
别名不用删除,自定义的别名在powershell退出时会自动清除。但是请放心,powershell内置别名(诸如ls,dir,fl等)不会清除。如果你非得手工删除别名。请使用
PS C:\PS> del alias:Edit
别名的导入与导出
可以使用Export-Alias将别名导出到文件,需要时再通过Import-Alias导入。但是导入时可能会有异常,提示别名已经存在无法导入:
PS C:\PS> Import-Alias alias.ps1Import-Alias : Alias not allowed because an alias with the name 'ac' already exists.At line:1 char:13+ Import-Alias <<<< alias.ps1+ CategoryInfo : ResourceExists: (ac:String) [Import-Alias], SessionStateException+ FullyQualifiedErrorId : AliasAlreadyExists,Microsoft.PowerShell.Commands.ImportAliasCommand
这时可以使用Force强制导入。
PS C:\PS> Export-Alias alias.ps1PS C:\PS> Import-Alias -Force alias.ps1
通过函数扩展别名
在Powershell中设置别名的确方便快捷,但是在设置别名的过程中并设置参数的相关信息。尽管别名会自动识别参数,但是如何把经常使用的参数默认设定在别名里面呢?例如Test-Connection -Count 2 -ComputerName,让-“-Count 2” 固化在别名中。
这时简单的别名无法完成上述需求,可以通过函数来完成它,并且一旦把函数拉过来,定义别名会变得更加灵活。
PS C:\PS> function test-conn { Test-Connection -Count 2 -ComputerName $args}PS C:\PS> Set-Alias tc test-connPS C:\PS> tc localhostSource Destination IPV4Address IPV6Address Bytes Time(ms)------ ----------- ----------- ----------- ----- --------test-me-01 localhost 127.0.0.1 ::1 32 0test-me-01 localhost 127.0.0.1 ::1 32 0
有了函数牵线,别名可以完成更高级更强大的功能,其中$args为参数的占位符。
永久别名
永久别名配置文件通常位于 ~\Documents\WindowsPowerShell 下的 Microsoft.PowerShell_profile.ps1 文件,可以使用以下命令查看配置文件路径:
PS C:\> $profile
一般该文件在没有创建前是不存在的,使用以下命令为当前用户创建profile命令并返回文件地址:
PS C:\> New-Item -Type file -Force $profile
创建别名可以在此文件中添加:
# touchSet-Alias touch New-Item# lsfunction getFileName{Get-ChildItem -Name}Remove-Item alias:\lsSet-Alias ls getFileName# llSet-Alias ll Get-ChildItem# 编辑Set-Alias -Name edit -Value notepad# 打开文件夹function openFn {explorer $args}Set-Alias open openFn
以后每次在打开PowerShell会话框的时候其会先读取$profile文件中的内容。
