首页 > 范文大全 > 正文

WMI在计算机管理中的应用研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇WMI在计算机管理中的应用研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:随着计算机及网络技术的迅猛发展,实时、高效、安全地管理计算机,更好地共享资源的各种技术成为人们研究的重点。本文针对传统C/S管理模式存在的问题,提出采用wmi技术来实现对计算机进行高效管理的方法,并给出获取远程计算机信息和远程控制计算机的具体实现。

关键词:WMI;C/S;远程控制;WMI脚本;

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2008)11-20370-02

1 引言

随着计算机技术和网络技术的飞速发展,计算机应用已经广泛普及到各行各业,为了更好地共享使用设备,对计算机管理也提出了越来越高的要求。传统的管理方法是采取严格的C/S模式,客户机必须运行特定的终端程序,时刻监听服务器,才能保证客户机实时响应。如果客户机因为某种原因退出终端程序,那么服务器就无法管理该客户机。因此,传统管理计算机的方法不仅增加了客户端的系统开销,而且对各种故障难以检测,其管理效率很难得到较大改善。本文首先介绍一种高效管理计算机的技术―WMI(Windows Management Instrumentation)―Windows管理规范,然后提出一种基于WMI技术对计算机进行高效管理的方法,给出获取远程计算机信息和远程控制计算机的WMI技术实现,结合应用实例说明这种方法的有效性。

2 WMI技术概述

WMI是Microsoft基于Web的企业管理(WBEM)的实现,同时也是一种基于标准的系统管理接口。

WMI技术是微软提供的Windows下的系统管理工具,通过该工具可以在本地管理客户端系统中几乎一切的信息,很多专业的网络管理工具都是基于WMI开发的。WMI是一种轻松获取系统信息的强大工具,信息源可能是一个硬件、操作系统或软件应用程序,数据源提供的信息称为规范。

WMI作为Windows 2000操作系统的一部分提供了可伸缩的,可扩展的管理架构.公共信息模型(CIM)是由分布式管理任务标准协会(DMTF)设计的一种可扩展的、面向对象的架构,用于管理系统、网络、应用程序、数据库和设备。Windows管理规范也称作CIM for Windows,提供了统一的访问管理信息的方式。利用WMI,可以监视、跟踪和控制有关软件应用程序、硬件组件和网络的系统事件,将来自不同来源的数据用通用、标准且逻辑上有组织的方式映像出去,以便在管理数据之间建立相互关系和关联,而不必考虑这些数据的类型、内容或来源。

使用WMI可以获得统一的编程API,远程管理,可发现和导航,过滤查询,强大的事件和订阅等功能。它由管理架构、WMI提供者、WMI使用者、CIM(Common Information Model, 公共信息模型)储存库和CIMOM (Common Information Model object manager, 公共信息模型对象管理器)五部分组成。在现代计算机管理中,系统管理员更为关注的是监视应用程序的运行状况、检测瓶颈或故障、管理和配置应用程序、查询应用程序数据、执行无缝的本地或远程管理等操作,并能在最短时间,最有效率的处理或规避上述问题。而WMI(Windows Management Instrumentation),即:视窗管理规范技术提供了一个统一的、基于标准的、可扩展的面向对象接口,除此之外,WMI还 提供了与系统管理信息和基础 WMI API 交互的标准方法,这些标准都是本例中基于WMI的计算机管理技术平台实现的基础。

3 基于WMI的计算机管理技术的实现

笔者在研究与开发学校机房管理系统的过程中,充分利用了WMI技术在计算机管理方面的强大功能,采用WEB形式对机房和实验室设备进行综合管理。本文给出了基于结合WMI和WEB服务技术来获取远程计算机信息、远程控制计算机及具体的实现方法,其它的管理功能如监视应用程序的运行状况、管理和配置应用程序等,均可采用类似的方法实现。

3.1 使用WMI获取远程计算机信息

现在的计算机以及网络组成十分复杂,例如系统硬件方面就有主板、硬盘、网卡等;软件方面有

操作系统、系统中安装的软件、正在运行的进程等;网络方面有域、工作组等等,对这些信息的收集和数据的处理是现代计算机管理中非常重要的任务。WMI的功能十分强大,可以管理windows的方方面面,从常见的文件操作到硬件管理,都可以通过WMI来实现。以下介绍笔者使用WMI和.NET框架一起来获取远程计算机软硬件的实现方法。

首先需要引入System.Management命名空间。在.NET中,使用System.Management命名空间,通过对class的操作,可以查询系统软硬件的信息。此命名空间是.NET 框架中的 WMI 命名空间,它提供的类对象为访问各种管理对象提供了面向对象的编程接口,并包括下列支持 WMI 操作的第一级类对象:

(1)ManagementObject 或 ManagementClass:分别为单个管理对象或类;

(2)ManagementEventWatcher:用于预订来自 WMI 的事件通知;

(3)ManagementQuery:用作所有查询类的基础;

(4)ManagementObjectSearcher:用于根据指定的查询或枚举检索 ManagementObject 或 ManagementClass 对象的集合。

System.Management 类的使用编码范例对.NET 框架环境很适合,并且 WMI 在任何适当的时候均使用标准基框架。应用程序和服务可以通过使用从 ManagementObjectSearcher 和 ManagementQuery 派生的类,查询其感兴趣的管理信息(例如在磁盘上还剩多少可用空间、当前 CPU 利用率是多少、某一应用程序正连接到哪一数据库等等);或者它们可以通过使用 ManagementEventWatcher 类来预订各种管理事件。

笔者在学习了上述相关理论知识后,了解在.NET中如何与WMI进行通讯以便达到获取信息的目的,并着手编写了一些利用System.Management下面的类来获取系统相关信息的代码,在此做一些简单介绍。

获取硬件信息(以下是一段获取主板的序列号以及制造商的代码):

Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard")

Dim share As ManagementObject

For Each share In searcher.Get()

Debug.WriteLine("主板制造商:" & share("Manufacturer"))

Debug.WriteLine("型号:" & share("Product"))

Debug.WriteLine("序列号:" & share("SerialNumber"))

Next share

此段代码同样采用WQL语句实现。同理,还可获取网卡硬件地址、硬盘ID和CPU系列号等信息,在此就不一一列举。

获取软件信息(以下是一段列出所有系统当前共享目录的代码):

Imports System.Management

Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_share")

Dim share As ManagementObject

For Each share In searcher.Get()

MessageBox.Show(share.GetText(TextFormat.Mof))

Next share

上述代码采用WQL(WMI Query Language)语句,也就是标准SQL的一个子集加上了WMI的扩展,进行SQL操作,代码简单,通俗易懂。由于WQL是个只读的查询语言,只能查询响应的数据,不能用UPDATE,INSERT等更新操作,并且采用了一种MOF(Meta Object Facility),托管对象格式的显示。

3.2 使用WMI远程控制计算机

WMI 提供了大量的规范以便为许多高端应用程序(例如,Microsoft Exchange、Microsoft SQL Server 和 Microsoft Internet 信息服务 (IIS))实现几乎任何管理任务。管理员可以执行下列任务:

(1)监视应用程序的运行状况;(2)检测瓶颈或故障;(3)管理和配置应用程序;(4)查询应用程序数据(使用对象关系的遍历和查询);(5)执行无缝的本地或远程管理操作。

一般而言,对计算机的控制主要包括:重新启动计算机、关闭计算机、注销当前用户、启动或终止某个进程(某项服务)。

使用WMI实现远程控制的最简单方法是编制WMI脚本程序,然后在命令行中运行该脚本,其命令格式为:Cscript.exe 脚本文件名,Cscript.exe是执行脚本的宿主程序,当运行该程序时,它自动执行作为输入参数的脚本文件。

笔者通过编写WMI脚本程序来实现计算机远程控制的过程中发现编写WMI脚本的很大一部分工作涉及到读取和设置属性值,WMI脚本的语法比较简单,编制起来较容易。脚本程序在任何一个具有WSH(Windows Script Host)环境的系统中都可以运行,由于它不依赖于特定的开发工具和运行环境,因此具有良好的可移植性。只要在脚本中指定了要控制的远程计算机名,且该计算机是可访问的同时拥有远程系统的管理员权限,则在任何时候都可以对它进行远程控制。相对于传统的C/S控制模式,这种方法显得相当简单和可靠。

对比传统的C/S控制模式,我们需要能更高效地管理计算机,因此笔者又尝试在软件中实现远程控制功能,发现同样通过简单的代码既可实现,以下介绍笔者在.NET环境下远程控制计算机的实现方法。

以远程关闭计算机为例(编写的核心代码):

Dim scope As ManagementScope = New ManagementScope(“\\”+RemoteHostName + “\Root\CIMV2”, options) //以给定的管理员帐号连接给定计算机名或者IP地址的计算机

Try

scope.Connect() //连接远程计算机

Dim oq As System.Management.ObjectQuery

oq = New System.Management.ObjectQuery("Select * From Win32_OperatingSystem")

//调用远程计算机进行WMI操作

Dim gwo As ManagementObjectSearcher

gwo = New ManagementObjectSearcher(scope, oq)

//从已经完成远程连接的计算机中,得到WMI操作集合

Dim pwo As ManagementObjectCollection

pwo = gwo.Get()//存放得到WMI操作

Dim mo As ManagementObject//定义WMI操作对象

For Each mo In pwo

Dim ss() As String = {" "}

mo.InvokeMethod("Shutdown", ss)

Next//调用WMI控制,实现关闭远程计算机

Console.WriteLine("指定的设备已经被关闭!")

Catch ex As Exception

Console.WriteLine(ex.Message)

Console.WriteLine("不能与指定设备建立连接,设备已经关闭或者出现网络故障!")

End Try

当触发某个事件,执行上述代码后,就实现了关闭远程计算机的功能,不需要管理员一一去关闭每台远程计算机。这种方法同样不需要在被控制的计算机上运行任何终端程序,只要该计算机是可访问且拥有该计算机的管理员权限,即可被远程控制。根据此例中的程序稍做修改就可得到远程重启计算机等其他一系列控制程序来进行远程控制。

4 结束语

与传统C/S模式相比,使用WMI 来进行计算机管理将会带来更可靠的计算环境和更高的系统可靠性,提高了管理的效率,从而节省了系统的开销。WMI技术的应用把计算机管理推向了一个新的境界,在当今高度信息化的时代,只有充分利用计算机和网络的先进技术,才能使计算机的管理日趋实时高效。

参考文献:

[1] 张茜,张银福. 基于Web服务器的设备管理技术研究与实现[J] 计算机工程与应用,2003,24:169-171.

[2] 姜边.一种基于.NET元数据的对象持久化框架[J] 计算机应用,2005,4:833-836.

[3] 彭锦,称德人.B/S结构的ebXML注册中心的实现[J] 计算机应用,2005,1:236-237.

[4] MARCIN POLICHT等. WMI技术指南[M] 北京:机械工业出版社,2002.

[5] DAVID CHAPPELL. .NET大局观[M] 电子工业出版社, 2006.

[6] BILL EVJEN,BILLY HOLLIS. 高级编程(第3版)[M] 清华大学出版社, 2005.