windows-运维-06 PowerShell别名

windows-运维-06 PowerShell别名

PowerShell别名

  cmdlet 的名称由一个动词和一个名词组成,其功能对用户来讲一目了然。但是对于一个经常使用powershell命令的人每天敲那么多命令也很麻烦啊。能不能把命令缩短一点呢?于是“别名”就应运而生了。Powershell内部也实现了很多常用命令的别名。例如Get-ChildItem,列出当前的子文件或目录。它有两个别名:ls 和 dir,这两个别名来源于unix 的shell和windows的cmd。
因此别名有两个作用:

  • 继承:继承unix-shell和windows-cmd。
  • 方便:方便用户使用。

处理别名:

查询别名所指的真实cmdlet命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PS C:\> Get-Alias -name dir 

CommandType Name Version Source
----------- ---- ------- ------
Alias dir -> Get-ChildItem


PS C:\> Get-Alias -name ls

CommandType Name Version Source
----------- ---- ------- ------
Alias ls -> Get-ChildItem


PS C:\> Get-Alias -name ft

CommandType Name Version Source
----------- ---- ------- ------
Alias ft -> Format-Table


PS C:\>

查看可用的别名

查看可用的别名,可以通过” ls alias:” 或者 ”Get-Alias“
如何查看所有以Remove打头的cmdlet的命令的别名呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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的别名的个数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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}

创建自己的别名

给记事本创建一个别名,并查看该别名;

1
2
3
4
PS C:\PS> Set-Alias -Name Edit -Value notepad
PS C:\PS> Edit
PS C:\PS> $alias:Edit
notepad

删除自己的别名

  别名不用删除,自定义的别名在powershell退出时会自动清除。但是请放心,powershell内置别名(诸如ls,dir,fl等)不会清除。如果你非得手工删除别名。请使用

1
PS C:\PS> del alias:Edit

保存自己的别名

  可以使用Export-Alias将别名导出到文件,需要时再通过Import-Alias导入。但是导入时可能会有异常,提示别名已经存在无法导入:

1
2
3
4
5
6
7
8
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强制导入。

1
2
PS C:\PS> Export-Alias alias.ps1
PS C:\PS> Import-Alias -Force alias.ps1

通过函数扩展别名

  在Powershell中设置别名的确方便快捷,但是在设置别名的过程中并设置参数的相关信息。尽管别名会自动识别参数,但是如何把经常使用的参数默认设定在别名里面呢?例如Test-Connection -Count 2 -ComputerName,让-“-Count 2” 固化在别名中。
  这时简单的别名无法完成上述需求,可以通过函数来完成它,并且一旦把函数拉过来,定义别名会变得更加灵活。

1
2
3
4
5
6
7
8
PS C:\PS> function test-conn { Test-Connection  -Count 2 -ComputerName $args}
PS C:\PS> Set-Alias tc test-conn
PS C:\PS> tc localhost

Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
test-me-01 localhost 127.0.0.1 ::1 32 0
test-me-01 localhost 127.0.0.1 ::1 32 0

有了函数牵线,别名可以完成更高级更强大的功能,其中$args为参数的占位符。

本篇到此结束

欢迎打赏,谢谢
------ 本文结束------
0%