当前位置: 移动技术网 > IT编程>脚本编程>Shell > Windows Powershell 别名

Windows Powershell 别名

2017年12月08日  | 移动技术网IT编程  | 我要评论
简短描述 在windows powershell中, 别名就是cmdlets或其他命令的替代名称. 详细描述 别名就是cmdlet或者命令(例如: 函数, 脚本, 文

简短描述
在windows powershell中, 别名就是cmdlets或其他命令的替代名称.

详细描述
别名就是cmdlet或者命令(例如: 函数, 脚本, 文件, 可执行文件. )的替代名称或者说是个昵称. 在使用命令的地方, 你都可以使用别名.

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

 
例如, 如果你为get-authenticodesignature设置了别名"gas", 你可以直接输入:

gas c:\scripts\sqlscript.ps1

 
而不必输入:
 

get-authenticodesignature c:\scripts\sqlscript.ps1

如果你为微软的word设置了别名"word", 你可以直接输入:
 
word
 
而不必输入:
 
"c:\program files\microsoft office\office11\winword.exe"
 

预定义的别名

windows powershell已经预定义了一部分别名, 例如: "cd"和"chdir"都是set-location的别名, "ls" 和"dir"是get-childitem的别名.
 
查找系统中的所有别名(包括预定别名), 输入如下命令:
 
get-alias

别名相关的cmdlets

windows powershell包含了几个cmdlets用于操作别名.
 
·         get-alias: 取得当前会话(session)中的别名. 
·         new-alias: 创建一个新的别名.
·         set-alias: 创建或修改一个别名.
·         export-alias:  导出一个或多个别名到文件中.
·         import-alias:  导入一个别文件到windows powershell.

 

需要cmdlets的详细信息, 输入:
 
get-help <cmdlet-name> -detailed
 
例如:
 
get-help export-alias -detailed
 
创建别名
创建一个新的别名, 可以使用new-alias cmdlet. 例如, 要为get-help创建一个"gh"别名, 输入,
 
new-alias -name gh -value get-help
 
你可以在命令中就好像你使用的完整的cmdlet名称和各种参数一样, 来使用这个别名.
 
例如, 取得get-wmiobject cmdlet的详细信息, 你只要输入:
 
get-help get-wmiobject -detailed
 
或者
 
gh get-wmiobject -detailed
 
保存别名
你创建的别名只在当前的会话(session)有效. 要在不同的会话中使用别名, 你必须把别名的定义写入你的windows powershell配置文件, 或者使用export-alias将别名存储到文件里.
 
查找别名
要在当前控制台上显示所有别名, 包括windows powershell预定义的别名, 你的windows powershell配置文件中定义的别名, 你在当前会话创建的别名, 只要输入:
 
get-alias
 
如果需要特定的别名, 通过为get-alias指定name参数即可. 例如, 要取得"p"开头的别名, 输入
 
get-alias -name p*
 
要查找特定cmdlet的所有别名, 可以输入:
 
get-alias | where-object {$_.definition -eq "<cmdlet-name>"}
 
例如:
 
get-alias | where-object {$_.definition -eq "remove-item"}
 

为带有参数的命令创建别名

你可以为cmdlet, 脚本, 函数, 或者可执行文件赋予别名. 但是你不能为带有参数的命令设置别名. 例如, 你能够为"get-eventlog"设置别名, 但是你不能为"get-eventlog -logname security"设置别名.
 
你只能通过创建一个包含该命令的函数来解决这个问题. 例如, 如下命令创建一个叫做”seclog"的函数, 此函数可以表示"get-eventlog -logname security”命令.
 
function seclog {get-eventlog -logname security}
 
现在你可以输入用名字"seclog"来简化之前的命令, 你还可以为函数"seclog"创建别名.
 
关于函数的信息, 输入:
 
get-help about_function
 

别名对象

windows powershell别名实际是类system.management.automation.aliasinfo的实例对象. 关于对象类型信息, 参见msdn 中"aliasinfo class"的主题.
 
要查看别名对象上的属性和方法, 首先取得别名对象, 并且通过管道传递给get-member cmdlet. 例如,
 
get-alias | get-member
 
要查看特定别名的属性值, 例如别名"dir", 取得该别名并通过管道传递给format-list cmdlet. 例如, 如下代码首先取得别名"dir"对象, 通过管道传递给format-list cmdlet, 通过对format-list的参数property赋值为所有 (*), 来显示别名"dir"的所有属性.
 
get-alias -name dir | format-list -property *
 
windows powershell别名provider

windows powershell别名provider(译者注: 一个provider就类似于用户使用的文件系统目录结构, 微软开发人员通过mvc这种设计思想, 将变量, 注册表, 别名等资源的管理, 抽象为文件系统的管理. 这样用户可以使用统一的语法对各种资源进行访问. powershell开发人员, 也能为powershell扩展其他的provider.) , 使得在windows powershell中, 查看别名就像浏览文件系统驱动器一样.
 
别名provider提供了"alias:"驱动器(译者注:虚拟驱动器, 只有在powershell中有效). 要进入alias: 驱动器, 输入:
 
set-location alias:
 
要查看该驱动器的内容, 输入:
 
get-childitem
 
在windows powershell其他的驱动器时, 如果想查看别名驱动器, 在目录前要协商驱动器名称, 紧跟着一个冒号(:). 例如,
 
get-childitem -path alias:
 
要取得特定别名的信息, 输入驱动器名称和别名名称, 或名称的模式(pattern. 笔者注: 一般使用的就是通配符. ). 例如, 要取得所有以"p"开头别名的列表, 输入:
 
get-childitem -path alias:p*
 
需要更多关于windows powershell别名provider的信息, 输入:
 
get-help alias-psprovider
 
 您还可以参考
要列出关于别名的cmdlets, 输入:
 
get-help *-alias
 
关于函数的信息, 输入:
 
get-help about_function

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网