Windows 2000及其以后版本为cmd命令增加了基本的Tab自动补全功能的支持,PowerShell是微软第1个实现为文件、函数、变量和命令提供了该支持的产品,并且还可以根据需要定制化。在第13章中讲解了如何使用Tab自动补全功能,并且介绍了如何使自定义函数提供Tab键自动补全名称支持。PowerTab也采用这种方式,并且增加了很多高级特性。
PowerTab是由微软公司名为“Marc van Orsouw”的MVP创建的一个免费工具,它也被称为“/\/\o\/\/”或“PowerShell Guy”。这一工具由一系列脚本组成,将这些脚本嵌入到PowerShell机制中可以提供用户扩展的Tab实现。它通过搜索对象来提供更好的实现建议,包括默认的shell甚至未触及对象,如.NET类型的WMI类名,以及其他对象。该工具还通过提供包含各种建议的下拉框来改善用户体验,默认的Tab扩展允许通过按Tab键循环提供支持。而PowerTab将会列出所有建议,然后可以通过使用方向键、Tab键或Shift+Tab键来选择所需。
本文是笔者的新书《Windows PowerShell2.0应用编程最佳实践》中第二十五章的内容,预计11月底出版,本文主要是讲述PowerTab的主要特性,会使读者能够更容易地使用命令提示符。
PowerTab
未提供自动安装包,可以从作者的网站http://thepowershellguy.com/blogs/posh/archive/2009/05/15/powerTab-0-99b2-ctp3-fix.asp
上下载ZIP
包来安装。尽管目前PowerTab
还是测试版,最新版本是0.99beta2
。但这个工具相当稳定,到目前为止尚未出现过任何崩溃或错误的情况。为安装该版本,从测试页下载ZIP
包,当前版本的PowerTab
文件名是“PowerTab99b2-fixed.zip
”。然后解压缩到选定的文件夹中,最好使用标准路径,如“C:\Program Files\PowerTab
”,在安装后最好不要改动这个路径。这里为了方便,选择的路径是“C:\PowerShell\PowerTab
”。 在文件夹中包含Setup.Cmd
的批处理命令,执行即可开始安装。其作用为初始化PowerShell
运行的环境变量,并通过dot-sourcing
方式引用PowerTabSetup.ps1
开始安装。 如果不需要使用 dot-source
脚本,则需要重启当前 Shell
实例。 安装过程如图1-1
所示,选择安装过程中出现的选项,然后等待安装完成。 安装脚本会创建一个默认的配置文件,为只读XML
格式且名为“PowerTabConfig.xml
”,默认与描述脚本保存在同一个文件夹中。 安装脚本会更新描述文件脚本,同时会附加如下代码,当启动shell
时这些代码会激活PowerTab
: # Default PowerShell Profile
# Generated by PowerTab TabCompletionSetup
################ Start of PowerTab Initialisatie Code ##############
# http://ThePowerShellGuy.com
& 'C:\PowerShell\PowerTab\Init-TabExpansion.ps1' `
############## End of PowerTab Initialisatie Code ###############
最后安装脚本会创建Tab
实现数据库,并且保存为TabExpansion.xml
文件。创建数据库是一个冗长的过程,因为脚本要使用所有.NET
类型和WMI
类,最后得到包含类和命令名称的本地缓存用来完成Tab
实现。 默认情况下PowerTab
会在PowerShell
的配置文件中写入初始化运行环境,这样才能在安装完成后跟随PowerShell
启动。为了检查该配置文件中是否包含PowerTab
,在PowerShell
控制台执行如图1-2
所示的命令。在包含目录路径的两行之前增加井号(#
),即将其屏蔽,这样禁用了PowerTab
。其中的“C:\PowerShell\PowerTab
”是本机的PowerTab
的安装路径,“D:\My Documents\WindowsPowerShell
”是PowerShell
的配置文件存放位置。 图 1-2
通过修改配置文件屏蔽 PowerTab
如果要卸载PowerTab
,可在PowerShell
控制台下键入notepad $profile
启动字处理软件。删除配置文件中关于PowerTab
的内容(务必做好备份,然后清理上面提到的两行内容)和PowerTab
的安装目录,在这里删除“C:\PowerShell\PowerTab
”即可。 安装成功后PowerTab
完全替代shell
的Tab
实现机制,提供了所有标准实现,如命令行、变量和函数等,同时增加了很多其他特性。例如,在输入.NET
的System.Net.WebClient
类时按Tab
键打出类的全名时,PowerTab
以新对象嵌入的方式完成全名或部分,图25-3
所示为建议列表。 shell
窗口左上角的Tab
文本区表示PowerTab
是Tab
实现操作的核心,如果从列表中选择一种实现,该列表会立即消失。 使用其他对象时,无论这些对象来自.NET
,COM
或WMI
,PowerTab
均列举其属性和方法,并提供实现。以System.Net.WebClient
为例,输入方法名,按Tab
键完成DownLoad*
方法。PowerTab
就会从Internet
上下载数据,如图1-4
所示。 方法和属性补全的工作原理不仅限于实例方法也同样应用于静态方法,PowerTab
通过检测类型描述和:分隔符,从类型的静态成员中提供实现。 PowerTab
通过为WMI
类名提供实现使得WMI
的使用更加简单,使用WMI
的障碍之一是需要记住所用的大量类名。PowerTab
正好解决了这一问题,图1-5
所示为在工作过程中PowerTab
如何指定正确的WMI
类名。 图 1-5 PowerTab
如何指定正确的 WMI
类名 PowerTab
通过检测WMI
类名的前缀来找到类,如果当前类以WMI_
、CIM_
或MSFT
开头,则自动补全功能会跟进显示响应的对象集。 PowerShell
对命令历史的支持存在缺陷,可以使用DOSKEY
和按F7
键得到可视化的命令清单。当有很多命令历史时,这个列表不便于查找,并且很难定位到需要的命令,PowerTab
通过引入特别的语法来搜索历史缓冲区来匹配自动补全以解决这一问题。如果想得到所有包含“cd
”字符串的命令,则需要键入h_cd
后按Tab
键。图1-6
所示为PowerTab
实现历史命令的自动补全。 图 1-6 PowerTab
实现历史命令的自动补全 以h_
为前缀的命令的实现会删除h_
部分,键入h_
后按Tab
键也会列出存储在历史缓冲器中的所有命令。使用h_
前缀相当于为对历史命令增加了一个命名空间,便于区别用户查询已执行的命令历史,还是执行新命令。 使用PowerShell
时命令参数的名称很难记忆。 例如,使用Get-Process cmdlet
调用过程实例时,应该使用-Name
参数,但却一直尝试用根本不存在的-Process
参数。 使用PowerTab
可解决这个问题。只要在一个cmdlet
名后键入一个连字符,然后按Tab
键会显示该cmdlet
的所有参数的匹配列表。图1-7
所示为Get-Process cmdlet
的匹配列表。 图 1-7 Get-Process cmdlet
的匹配列表 有时很小的Shell
窗口显示过多的信息使得查看变得困难,PowerTab
通过打开新窗口来解决这个问题。新窗口会阻止控制台窗口中显示的Tab
自动补全信息,而将信息显示在一个新的数据网格中。用户在其中查看详细的信息,然后通过双击或按Enter
键选择一行,被选中的项会作为有效的实现返回。 与原始的Tab
自动补全语法很相似,PowerTab
提供多种捷径来弹出新窗口。最吸引人的可能是返回一个WMI
类的列表,因为有关WMI
类的相关信息的数量过多,在控制台查看很不方便。为了弹出这个窗口,在WMI
类名后键入W_
,然后按Tab
键。图25-8
所示为PowerTab
启动网格窗口显示的WMI
类。 图 1-8 PowerTab
启动网格窗口显示的 WMI
类 在弹出窗口中使用 W_
捷径匹配时,必须跳过 WMI
类名的 Win32_
部分。为了得到 proc
串的类,也可能是 Win32_Process
。必须键入 w_proc[Tab]
,键入 w_win32_proc[Tab]
无效。 PowerTab
还支持如下方法来弹出一个新窗口。 (3
)d_
:得到当前目录下的所有文件和子目录。 PowerTab
可使函数为用户弹出新窗口,以更加友好的方式来展示对象完全得益于名为“out-dataGridView
”的函数。可为其输入一个对象集合,图1-9
所示为使用该函数来展示进程ID
、名称,以及为所有过程设置属性值,执行结果如图1-10
所示。 图 1-9
用 out-dataGridView
函数显示对象集合 图 1-10
执行结果 PowerTab
的主要配置文件是PowerTabConfig.xml
,与PowerShell
描述脚本保存在相同的目录中。PowerShell
配置文件在系统中的变量是$profile
,可以通过键入$profile
查找到配置文件的地址进而找到PowerTab
配置文件,在Windows Vista
系统中可能保存在C:\Users\<UserName>\Documents\WindowsPowerShell
文件夹中。XML
文件可读,而且很容易手动编辑文件。即以属性方式来定义设置,XML
元素如下: <Category>Global</Category>
<Name>TabActivityIndicator</Name>
如果需要PowerTab
移除在shell
窗口的左上角显示Tab
扩展的文字区,则必须将1
改为0
,并且在修改配置文件后重启Shell
进程才能生效。 PowerTab
允许用户修改其配置文件,全局变量$PowerTabConfig
是指向所有配置的入口。例如,查看Tab
行动指示器是否可用,则查看TabActivityIndicator
属性。要将指示器禁用,则将此属性设置为$false
,如图1-11
所示。 如果要保存配置,则调用Export-TabExpansionConfig
函数,如 图1-12
所示。 图 1-12
调用 Export-TabExpansionConfig
函数 在 PowerTab
中的Tab
自动补全处理程序 称为“ConsoleList
”的处理程序,它可以绘制画出包含自动补全列表的方框,由名为“Lerch.PowerShell.dll
的PowerShell
”管理单元(作者为Aaron Lerch
, )发布,该管理单元提供了智能补全处理处理程序。如此命名是因为它打开一个小的弹出窗口,如同在Visual Studio .NET
和其他开发环境用来提供匹配的智能弹出提示。 为了使intelligence
处理程序可用,需要注册LerchSnapIn
管理单元。首先以管理员运行PowerShell
,然后定位到PowerTab
的安装目录并调用installutil.exe
注册Lerch.PowerShell.dll
,如图1-13
所示。 图 1-13
调用 installutil
注册 intelligence
处理程序 确保安装成功完成,并且在installutil
命令中没有出现任何错误提示。 installutil.exe
程序是 .NET
框架中的一部分,如果它在系统路径中不存在,可以在框架的安装文件中找到该文件。通常情况下安装在 C:\Windows\Microsoft.NET\Framework\v2.0.50727\
下,如果环境变量 Path
中没有添加该目录,则不能直接调用它。 如果安装顺利,则需确保当开启shell
会话时加载snap-in
。为此,需要在配置脚本中增加一个对Add-PSSnapIn
的调用。用记事本打开配置脚本,其路径可以通过调用全局变量$profile
找到,在PowerTab
初始化代码前添加下面的代码: #add the Lerch IntelliSense snap-in (needed by PowerTab)
需要注意的是一定要在PowerTab
启动代码前几句加载管理单元,否则不会加载智能提示。 当然其中的注释并不是必须的,但是可提高长期积累且不断添加内容的配置文件的可以读性。 还需要修改PowerTab
的配置,以设置DefaultHandler
的属性。最后试着按Tab
键匹配,结果如图1-14
所示。这里修改默认处理为智能提示的操作过程只是临时生效的,如果需要长期有效,则调用Export-TabExpansionConfig
功能保存配置。 图 1-14
修改默认处理程序为智能提示并调用智能提示 如果需要把默认处理程序改回为ConsoleList
,则执行与上面相反的操作。即首先将PowerTabConfig.DefaultHandler
设置为ConsoleList
,然后删除或注释PowerShell
的配置文件$profile
中有关加载默认处理程序为智能提示的部分,修改后必须调用Export-TabExpansionConfig
保存。 PowerTab
支持ConsoleList
和intelligence
两种自动补全程序共存,它能够检测用户是否双击了Tab
键。如果双击,则可以绑定不同的自动补全处理程序。此处理程序通过配置文件中AlternateHandler
属性指定,这样 即可 将ConsoleList
处理程序与Tab
键绑定,使intelligence
与双击Tab
键绑定。要设置该功能,必须按照一定规则设定处理程序属性。即通过设置DoubleTabEnabled
的属性为$true
来启动double-Tab
功能,最后设置AlternateHandler
属性指定双击Tab
的处理程序。图1-15
所示为使double-Tab
功能有效的命令。 图 1-15
使 double-tab
功能有效的命令 如果需要这个设置,则必须调用Export-TabExpansionConfig
命令保存配置。 Tab
扩展数据库是包括所有项目的一个本地缓存,这些项目能以命令自动补全的方式返回。该数据库包括多种类型,默认为.NET
类型的清单、WMI
类,以及自定义匹配条目。使用这个数据库可以将这些自定义匹配条目作为代码片段,即用一个简单的关键字来保存一个长的字符串。只要键入这个关键字,即可得到长字符串。在同一关键字下可保存多个匹配,这样当需要一个关键字对应的匹配时可以得到一个选择列表。 可以通过添加add-TabExpansion
函数来添加自定义的Tab
扩展,需要关键字和扩展字符串两个参数。下面使用这一功能来创建一个属于自定义扩展列表,其中包括多个不同的文件路径,可以用其快速导航到需要的路径。图1-16
所示为在清单中添加两个文件夹的代码。 PowerTab
的自定义匹配语法为在脱字符号(^
)后键入关键字,为了更快地导航到自定义列表,键入cd fav^[Tab]
后可在弹出的列表中选择条目。 要在其他shell
会话中应用该功能,必须调用Export-TabExpansionDataBase
方法保存Tab
扩展数据库的设置,如图1-17
所示。 PowerTab
是一个强大的工具,保存了多类型,能够极大地提高工作效率。可以肯定,一旦开始使用PowerTab
,就再也不会使用PowerShell
的默认的Tab
扩展方法了。 本章总结了PowerShell
的扩展方法,首先用简单的例子帮助读者理解Shell
组件的工作原理,然后使用不同的语法技术,如.NET
、COM
和 WMI
对象与操作系统和网络交互。最后介绍了最重要的并很容易获得且能够极大提高工作效率的工具。
本文转自 51CTO博客,原文链接:http://blog.51cto.com/xiaoyinnet/235814 ,如需转载请自行联系原作者