代码改变世界

PowerShell 2.0之使用WMI管理Windows(五)生成WMI代码

2010-12-30 02:24 @天行健中国元素 阅读(...) 评论(...) 编辑 收藏

WMI的优点是能从海量的数据中抽取信息,问题是信息量过大,解决这个问题最好的方法是有个集成开发环境或者代码生成器。在Internet上有多种免费工具可列举所有类及其属性,并生成用于查询对象实例和访问的属性代码。这样便于用户对任何未知的对象进行脚本编程,可以生成VBScript代码,然后转换为PowerShell。也可以从生成代码中找到要用到的对象,然后在PowerShell中使用即可。

1 通过Scriptomatic生成WMI代码

Scriptomatic工具是微软推出的首个WMI编程辅助开发工具,可以列出所有WMI类并生成获取所有对象实例,同时打印所选对象的代码。Scriptomatic能生成VBScript、Jscript、Perl和Python代码,但是不支持输出PowerShell代码,可以将生成的VBScript代码转换为PowerShell代码。

【提示】

用户能够在微软的TechNet站点下载Scriptomatic 2.0,网址是http://www.microsoft.com/
technet/scriptcenter/tools/scripto2.mspx。它一个自释放形式发布,其中包含一个HTML应用程序(.hta)文件。如果用户在Windows Vista以上操作系统中没有执行权限时,将会报错。可以右击文件图标,然后选择“运行方式”|“以管理员身份运行”选项。

Scriptomatic程序窗口允许用户从下拉列表框中选择WMI类,选中后将会生成代码。用于获取所有的实例,并打印其属性。用户可以单击“Run”按钮运行生成的代码,也可以从文本框中复制代码。下面用Scriptomatic生成获取系统监视器的方案脚本,需要从下拉列表框中选择Win32_DesktopMonitor类,结果如图25所示。

image

图1 通过Scriptomatic获取脚本中对象信息

复制其中的WQL语句,然后在gwmi中执行,结果如图26所示。

image

图2 通过查询对象获取监视器状态

在这里可以只选择需要的属性来减少脚本的输出。大多数用户会首先浏览VBScript代码,找出有可能有用的属性名,如ScreenHeight和ScreenWidth属性。接下来只需要通过将Get-WmiObject的结果用管道传递select过滤即可,执行结果如图27所示。

image

图3 获取系统分辨率

有时某些属性在PowerShell的默认视图不显示,如Win32_BIOS类中的一些属性,如Caption和CurrentLanguage。在默认情况下的查询结果如图28所示。

image

图4 查询结果

在Scriptomatic生成的代码中包含默认视图下没有的一些属性,通过查找这些属性名可以强制PowerShell显示这些内容,如图29所示。

image

图5 强制PowerShell显示部分属性内容

2 总 结

WMI是一系列能够用于日程管理工作的成熟技术,随着Windows远程管理时代的到来,因为可以在不重新配置防火墙允许DCOM流量,从而使得WMI变得更具吸引力。在所有与WMI相关的脚本工具中,PowerShell是学习、掌握和使用WMI最简单的一个。

学习WMI是一个漫长的过程,因为其中包含大量编程涉及的对象需要掌握,读者可以从微软脚本中心的脚本资料库http://www.microsoft.com/technet/scriptcenter/ default.mspx中获取很多有用的知识。其中包含大量的脚本实例,绝大多数是使用WMI编程操作系统组件;另外一个获取WMI类参考的网址是http://msdn.microsoft.com/en-us/library/aa394554.aspx,这个页面是WMI类的资料索引。其中包含所有类完整的文档,可以从中间找到任何一个特定的属性和方法。最后,可以通过DMTF的规范http://www.dmtf.org/standards/wbem获取WBEM的整体概况并通过DMTF指南http://www.wbemsolutions.com/tutorials/DMTF获取标准的一些基本知识。

尽管WMI是个很复杂的主题,而且需要花很大精力才能熟练掌握,但是PowerShell提供了很好的支持并且能够很好地操作WMI对象。在本文采用WMI查询对象信息,WMI也支持订阅特定事件,在事件发生时将会收到通知。当前版本的PowerShell不支持订阅事件,为此需要安装一个管理单元,名为“PSEventing”,本系列文章中的《Windows PowerShell 2.0之.NET事件PSEventing》。

 

 

 

 

 

 

作者: 付海军
出处:http://fuhj02.cnblogs.com
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.shell.tor.hu/