本文目录
cmdlet 的名称由一个动词和一个名词组成,其功能对用户来讲一目了然。但是对于一个经常使用powershell命令的人每天敲那么多命令也很麻烦啊。能不能把命令缩短一点呢?于是“别名”就应运而生了。Powershell内部也实现了很多常用命令的别名。例如Get-ChildItem,列出当前的子文件或目录。它有两个别名:ls 和 dir,这两个别名来源于unix 的shell和windows的cmd。
因此别名有两个作用:
- 继承:继承unix-shell和windows-cmd。
- 方便:方便用户使用。
处理别名:
查询别名所指的真实cmdlet命令。
PS C:\PS> Get-Alias -name ls CommandType Name Definition ----------- ---- ---------- Alias ls Get-ChildItem PS C:\PS> Get-Alias -name dir CommandType Name Definition ----------- ---- ---------- Alias dir Get-ChildItem PS C:\PS> Get-Alias -name fl CommandType Name Definition ----------- ---- ---------- Alias fl Format-List PS C:\PS> Get-Alias -name ft CommandType 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-Item Alias erase Remove-Item Alias rbp Remove-PSBreakpoint Alias rd Remove-Item Alias rdr Remove-PSDrive Alias ri Remove-Item Alias rjb Remove-Job Alias rm Remove-Item Alias rmdir Remove-Item Alias rmo Remove-Module Alias rp Remove-ItemProperty Alias rsn Remove-PSSession Alias rsnp Remove-PSSnapin Alias rv Remove-Variable Alias 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 Count Count 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> Set-Alias -Name Edit -Value notepad PS C:\PS> Edit PS C:\PS> $alias:Edit notepad
删除自己的别名
别名不用删除,自定义的别名在powershell退出时会自动清除。但是请放心,powershell内置别名(诸如ls,dir,fl等)不会清除。如果你非得手工删除别名。请使用
PS C:\PS> del alias:Edit
保存自己的别名
可以使用Export-Alias将别名导出到文件,需要时再通过Import-Alias导入。但是导入时可能会有异常,提示别名已经存在无法导入:
PS C:\PS> Import-Alias alias.ps1 Import-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.ps1 PS C:\PS> Import-Alias -Force alias.ps1
本文链接: https://www.pstips.net/powershell-alias.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
set-alias仅支持-value为cmdlet。我想创建一个别名来执行“ssh somehost”,但是ssh是路径下的一个可执行exe文件,并且带参数的命令会整个被alias当作cmdlet去执行:
C:\Users\Edward\Documents\GitHub> set-alias -Name goonline -Value “ssh username@somehost”
C:\Users\Edward\Documents\GitHub> goonline
goonline : The term ‘ssh username@somehost’ is not recognized as the name of a cmdlet, function, script file, or operab
le program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ goonline
+ ~~~~~~~~
+ CategoryInfo : ObjectNotFound: (ssh username@somehost:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
我搜索了一下:
http://stackoverflow.com/questions/18970392/setting-an-alias-with-attributes-in-powershell
这个给出的方法是创建一个function来达到别名的效果:
C:\Users\Edward\Documents\GitHub> function goonline { ssh username@somehost}
C:\Users\Edward\Documents\GitHub> goonline
ssh: Could not resolve hostname somehost: Name or service not known
但这个方法不能持久化,重新打开就不能用了。 powershell 有类似 .bashrc 的启动设置脚本吗?
http://stackoverflow.com/questions/13371407/how-to-alias-a-powershell-script-to-be-called-from-prompt
这个给出的方法是用 New-Alias 导入一个外部psl文件,这个操作好像能持久化。不过那个外部脚本该怎么写呢?
http://www.pstips.net/powershell-auto-run-profile.html
我只想说这种方式的,这么让他一直生效啊,要修改注册表么,但是这样的话跟cmd定义的不都差不多了。没有像linux那么方便改个配置文件就行了的么。。。
放在用户配置文件中会自动加载
http://www.pstips.net/powershell-auto-run-profile.html
请问alias是什么?我初步尝试后认为它的作用等于Get-Alias。但是Get-Alias -name alias却get不到结果。不是PS内部命令(命名不符合规则,Get-Help里也没有);然后也不是CMD命令,因为CMD里执行不了alias。不是硬盘上的文件,也不是我定义的函数,也不是变量。如果是虚拟驱动器,那应该还缺一个冒号。所以,alias是什么?
我在 Stackover Flow 上找到了答案,看起来是 PowerShell 本身的“智能查找”,通过 Trace-Command 跟踪信息中可以看到:
1. 本身是否是 cmdlet ?
2. 环境变量中是否存在同名的可执行文件?
3. 是否存在”Get-Alias”?
Trace-Command -Expression { alias } -Name CommandDiscovery -PSHost
https://stackoverflow.com/questions/21033379/what-is-the-alias-keyword-in-powershell