windows-运维-06 PowerShell

windows-运维-06 PowerShell

PowerShell别名

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

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

处理别名:

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

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的命令的别名呢?

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

通过函数扩展别名

在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-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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值