管理大型的异构网络非常繁琐,而在本地计算机上用不同的自动化接口,如PowerShell、COM对象,甚至基于.NET的程序管理单独的程序和服务则容易得多。关键是存在于混合网络中的分布式系统,即如何操作防火墙后面的设备。如果它只是一种硬件设备,如路由器,则使用WMI(Windows Management Instrumentation)即可。WMI是协同工作的一系列技术,可以提供网络对象的统一访问形式。并且用其查询服务信息,尤其是各种形式的数据、触发命令,以及改变配置选项
1 查询硬件设备
与Windows内核紧密结合允许于WMI操作多种设备,获取不同计算接和硬件配置的信息,例如,可以通过查询Win32_DiskDirver对象获取系统中当前安装的硬盘,如图1所示。
图1 获取当前系统中安装的硬盘
其中列出了所有驱动器,包括此时所使用的U盘。上面的清单中只包含物理硬盘,如果要获取硬盘的分区信息,则需要使用Win32_DiskPartition类。如可以用BootPartition属性来查询系统中的启动分区,执行结果如图2所示。
图2 执行结果
分区和映射到本地的网络驱动器都会被赋予一个驱动器盘符。如果需要获取逻辑驱动器,则需要用Win32_LogicalDisk类实例,如图3所示。
图3 获取逻辑驱动器
可以通过查询Win32_BIOS、Win32_Process和Win32_PhysicalMemory对象分别获得BIOS、CPU和内存的具体信息。创建可访问网络上大量计算机并提取硬件配信息的脚本的工作量会很大,可以用收集的数据生成报告并检测发生故障的硬件。
6 获取软件信息
日常维护重要的工作之一就是保持常用的软件都是最新的,可以用WMI检索安装服务组并升级网络中所有的计算机并且在软件存在更新,却不是最新的情况下触发警报。
6.1 操作系统更新
首先需要检查操作系统的版本及已安装的服务包,可以使用当前系统的Win32_OperatingSystem对象在Window XP和Windows Server 2008下的执行结果分别如图4和图5所示。
图4 获取Windows XP系统版本号
图5 获取Windows Server2008系统版本号
热点补丁以快速修复引擎的方式更新,可以通过查询系统中的Win32_QuickFixEngineering对象来获取。通常情况下,会有很多这样的补丁,因为一旦出现问题和可能被攻击的弱点就会通过Windows Update服务推送到客户端。用户可以使用HotFixID属性获取只包含快速修复的清单,执行结果如图6所示:
图6 执行结果
2 已安装程序
微软已经通过Windows Installer技术做了大量程序安装进程的标准化工作,很多时候可在程序封面上看到“Designed for Windows”字样的Logo。这些程序必须使用基于Windows Install安装,它们瞄准的就是更易于程序安装的管理。Windows安装包定义软件安装是通过将程序功能逐个拆分成组件,功能是软件程序在安装过程中可以由用户选择安装或跳过的部分。与获取操作系统中的特性类似,用户可以通过WMI获取安装产品和特性信息,这样通过网络维护和升级很多台计算机上大的程序就变得非常容易了。
很多基于Windows Installer的安装程序允许用户选择安装在硬盘中的程序功能,程序功能可以在后期增加或移除。可以通过WMI获取所有的功能或某一产品的功能,WMI可以使得检查功能是否安装变得非常容易。
用户可以通过获取所有Win32_Product实例得到在当前系统中安装的所有软件。由于在系统中安装的软件可能会有很多,这时对感兴趣的软件用WQL过滤会很容易找到所需。如图7所示为查找所有name属性中包含“PowerShell”字样的已安装软件:
图7 查找已安装软件名中包含“PowerShell”字样的软件
7 网络配置
网络适配器是可以通过WMI对象通信的硬件类型之一,为了获得网络信息,可以检索系统中的Win32_NetworkAdapter对象。图8所示为是查询当前计算机中默认的网络适配器Atheros Ethernet的信息。
图8 获取网络适配器硬件信息
能够看到信息与硬件相关,没有与Internet相关的设置,如适配器绑定的IP地址。这些信息可以通过Win32_NetworkAdapterConfiguration对象获得,如图9所示。在其中能够看到已经获取IP地址、默认网关和其他一些与网络设置相关的信息。
图9 获取网络适配器配置信息
3 总结
WMI是一系列能够用于日程管理工作的成熟技术,随着Windows远程管理时代的到来,因为可以在不重新配置防火墙允许DCOM流量,从而使得WMI变得更具吸引力。在所有与WMI相关的脚本工具中,PowerShell是学习、掌握和使用WMI最简单的一个。