欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Windows Powershell 别名

程序员文章站 2022-11-15 17:33:38
简短描述 在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