powershell:Windows PowerShell2.0的使用PowerTab加强Tab键自动补全

  Windows 2000及其以后版本为cmd命令增加了基本Tab自动补全功能支持PowerShell是微软第1个实现为文件、、变量和命令提供了该支持产品并且还可以根据需要定制化Windows PowerShell2.0应用编程最佳实战第13章中讲解了如何使用Tab自动补全功能并且介绍了如何使自定义提供Tab键自动补全名称支持PowerTab也采用这种方式并且增加了很多高级特性

  PowerTab是由微软公司名为“Marc van Orsouw”MVP创建个免费工具它也被称为“/\/\o\/\/”或“PowerShell Guy”工具由系列脚本组成将这些脚本嵌入到PowerShell机制中可以提供用户扩展Tab实现它通过搜索对象来提供更好实现建议包括默认shell甚至未触及对象如.NET类型WMI类名以及其他对象该工具还通过提供包含各种建议下拉框来改善用户体验默认Tab扩展允许通过按Tab键循环提供支持而PowerTab将会列出所有建议然后可以通过使用方向键、Tab键或Sht+Tab键来选择所需

  1、安装、禁用和卸载PowerTab

  PowerTab未提供自动安装包可以从作者网站WebSitehttp://thepowershellguy.com/blogs/posh/attachment/16331.ashx

  上下载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所示选择安装过程中出现选项然后等待安装完成



  查看原图(大图)

  图1-1  通过批处理安装PowerTab

  安装脚本会创建个默认配置文件为只读XML格式且名为“PowerTabConfig.xml”默认和描述脚本保存在同个文件夹中

  安装脚本会更新描述文件脚本同时会附加如下代码当启动shell时这些代码会激活PowerTab:

# Default PowerShell Profile
# Generated by PowerTab TabCompletionSetup
 
################ Start of PowerTab Initialisatie Code ##############
#
#  added to Profile by PowerTab Setup For Loading of Custom TabExpansion,
#
# /\/\o\/\/ 2007
#
# http://ThePowerShellGuy.com
#
 
# Initialize PowerTab 
 
& 'C:\PowerShell\PowerTab\Init-TabExpansion.ps1' `
    -ConfigurationLocation 'D:\My Documents\WindowsPowerShell' 
 
############## End of PowerTab Initialisatie Code ###############


  最后安装脚本会创建Tab实现数据库并且保存为TabExpansion.xml文件创建数据库是个冗长过程脚本要使用所有.NET类型和WMI类最后得到包含类和命令名称本地缓存Cache用来完成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启动字处理软件Software删除配置文件中有关PowerTab内容(务必做好备份然后清理上面提到两行内容)和PowerTab安装目录在这里删除“C:\PowerShell\PowerTab”即可

  2、Power Tab工作原理

  安装成功后PowerTab完全替代shellTab实现机制提供了所有标准实现如命令行、变量和同时增加了很多其他特性例如在输入.NET.Net.WebClient类时按Tab键打出类全名时PowerTab以新对象嵌入方式完成全名或部分图25-3所示为建议列表



  查看原图(大图)

  图1-3  建议列表

  shell窗口左上角Tab文本区表示PowerTab是Tab实现操作核心如果从列表中选择种实现该列表会立即消失

  使用其他对象时无论这些对象来自.NETCOM或WMIPowerTab均列举其属性和思路方法并提供实现.Net.WebClient为例输入思路方法名按Tab键完成DownLoad*思路方法PowerTab就会从Internet上下载数据如图1-4所示



  图1-4  从Internet上下载数据

  思路方法和属性补全工作原理不仅限于例子思路方法也同样应用于静态思路方法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匹配列表

  这个特性可以应用在和外部脚本文件中

  2.1  数据栅格弹出窗口

  有时很小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还支持如下思路方法来弹出个新窗口

  (1)t_:显示.NET类型列表

  (2)f_: 列出当前定义

  (3)d_:得到当前目录下所有文件和子目录

  (4)g_:列出所有保存在历史命令中命令

  (5)c_:显示自定义匹配

  PowerTab可使为用户弹出新窗口以更加友好方式来展示对象完全得益于名为“out-dataGridView”可为其输入个对象集合图1-9所示为使用该来展示进程ID、名称以及为所有过程设置属性值执行结果如图1-10所示

  

  查看原图(大图) 

  图1-9  用out-dataGridView显示对象集合           图1-10  执行结果

  3  配置PowerTab

  PowerTab主要配置文件是PowerTabConfig.xml和PowerShell描述脚本保存在相同目录中PowerShell配置文件在系统中变量是$profile可以通过键入$profile查找到配置文件地址进而找到PowerTab配置文件在Windows Vista系统中可能保存在C:\Users\<UserName>\Documents\WindowsPowerShell文件夹中XML文件可读而且很容易手动编辑文件即以属性方式来定义设置XML元素如下:

<Config>
<Category>Global</Category>
<Name>TabActivityIndicator</Name>
<Value>1</Value>
<Type>bool</Type>
</Config>


  如果需要PowerTab移除在shell窗口左上角显示Tab扩展文字区则必须将1改为0并且在修改配置文件后重启Shell进程才能生效

  PowerTab允许用户修改其配置文件全局变量$PowerTabConfig是指向所有配置入口例如查看Tab行动指示器是否可用则查看TabActivityIndicator属性要将指示器禁用则将此属性设置为$false如图1-11所示



  图1-11  将属性设置为$false

  如果要保存配置Export-TabExpansionConfig如图1-12所示



  图1-12  Export-TabExpansionConfig

  3.1  智能感知补全

  在PowerTab中Tab自动补全处理称为“ConsoleList”处理它可以绘制画出包含自动补全列表方框由名为“Lerch.PowerShell.dllPowerShell”管理单元(作者为Aaron Lerch http://www.aaronlerch.com)发布该管理单元提供了智能补全处理处理如此命名是它打开个小弹出窗口如同在Visual Studio .NET和其他开发环境用来提供匹配智能弹出提示

  为了使elligence处理可用需要注册LerchSnapIn管理单元首先以管理员运行PowerShell然后定位到PowerTab安装目录并util.exe注册Lerch.PowerShell.dll如图1-13所示



  图1-13  util注册elligence处理

  确保安装成功完成并且在util命令中没有出现任何提示

  【提示】

  util.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)
Add-PSSnapin LerchSnapIn
# Initialize PowerTab 


  需要注意定要在PowerTab启动代码前几句加载管理单元否则不会加载智能提示当然其中注释并不是必须但是可提高长期积累且不断添加内容配置文件可以读性

  还需要修改PowerTab配置以设置DefaultHandler属性最后试着按Tab键匹配结果如图1-14所示这里修改默认处理为智能提示操作过程只是临时生效如果需要长期有效Export-TabExpansionConfig功能保存配置



  图1-14  修改默认处理为智能提示并智能提示

  如果需要把默认处理改回为ConsoleList则执行和上面相反操作即首先将PowerTabConfig.DefaultHandler设置为ConsoleList然后删除或注释PowerShell配置文件$profile中有关加载默认处理为智能提示部分修改后必须Export-TabExpansionConfig保存

  PowerTab支持ConsoleList和elligence两种自动补全共存它能够检测用户是否双击了Tab键如果双击则可以绑定区别自动补全处理此处理通过配置文件中AlternateHandler属性指定这样即可将ConsoleList处理和Tab键绑定使elligence和双击Tab键绑定要设置该功能必须按照定规则设定处理属性即通过设置DoubleTabEnabled属性为$true来启动double-Tab功能最后设置AlternateHandler属性指定双击Tab处理



   图1-15  使double-tab功能有效命令

  如果需要这个设置则必须Export-TabExpansionConfig命令保存配置

  3.2  Tab扩展数据库

  Tab扩展数据库是包括所有项目个本地缓存Cache这些项目能以命令自动补全方式返回该数据库包括多种类型默认为.NET类型清单、WMI类以及自定义匹配条目使用这个数据库可以将这些自定义匹配条目作为代码片段即用个简单关键字来保存个长只要键入这个关键字即可得到长在同关键字下可保存多个匹配这样当需要个关键字对应匹配时可以得到个选择列表

  可以通过添加add-TabExpansion来添加自定义Tab扩展需要关键字和扩展串两个参数下面使用这功能来创建个属于自定义扩展列表其中包括多个区别文件路径可以用其快速导航到需要路径图1-16所示为在清单中添加两个文件夹代码





  图1-16  在清单中添加两个文件夹代码

  PowerTab自定义匹配语法为在脱号(^)后键入关键字为了更快地导航到自定义列表键入cd fav^[Tab]后可在弹出列表中选择条目

  要在其他shell会话中应用该功能必须Export-TabExpansionDataBase思路方法保存Tab扩展数据库设置如图1-17所示



  图1-17  保存Tab扩展数据库设置

  4、 小结

  PowerTab是个强大工具保存了多类型能够极大地提高工作效率可以肯定旦开始使用PowerTab就再也不会使用PowerShell默认Tab扩展思路方法了

  本章整理总结了PowerShell扩展思路方法首先用简单例子帮助读者理解Shell组件工作原理然后使用区别语法技术如.NET、COM和 WMI对象和操作系统和网络交互最后介绍了最重要并很容易获得且能够极大提高工作效率工具



Tags:  powershell

延伸阅读

最新评论

发表评论