WMI详解.docx_第1页
WMI详解.docx_第2页
WMI详解.docx_第3页
WMI详解.docx_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

WMI详解(一)什么是WMI?WMI最初于1998年作为一个附加组件与WindowsNT4.0ServicePack4一起发行,是内置在Windows2000、WindowsXP和WindowsServer2003系列操作系统中核心的管理支持技术。基于由DistributedManagementTaskForce(DMTF)所监督的业界标准,WMI是一种规范和基础结构,通过它可以访问、配置、管理和监视所有的几乎所有的Windows资源。要掌握WMI的强大功能和范围,需要考虑以前(或者现在)如何管理并监视Windows工作站和服务器。您可能用过或仍在使用众多的图形化管理工具来管理Windows资源例如磁盘、事件日志、文件、文件夹、文件系统、网络组件、操作系统设置、性能数据、打印机、进程、注册表设置、安全性、服务、共享、用户、组等等。尽管图形化工具提供了一种功能管理解决方案,它们所共有的东西是什么呢?一种答案是,在WMI之前,所有的Windows图形化管理工具都依赖于Win32应用程序编程接口(ApplicationProgrammingInterfaces,APIs)来访问和管理Windows资源。为什么?因为在WMI之前,能够以编程方式访问Windows资源的惟一方法就是通过Win32API。这种情况使Windows系统管理员无法通过一种简便的方法利用常见的脚本语言来自动化常用的系统管理任务,因为大多数脚本语言都不能直接调用Win32API。通过提供一致的模型和框架,WMI改变了这种情况通过模型和框架,所有的Windows资源均被描述并公开给外界。最好的一点是,系统管理员可以使用WMI脚本库创建系统管理脚本,从而管理任何通过WMI公开的Windows资源!使用WindowsScriptHost和MicrosoftVisualBasicScriptingEdition(VBScript),或任何支持COM自动化的脚本语言(例如,ActiveStateCorporation的ActivePerl),可以编写脚本来管理和自动化企业系统、应用程序和网络的下列方面:WindowsServer2003、WindowsXP专业版和Windows2000系统管理。您可以编写脚本来检索性能数据,管理事件日志、文件系统、打印机、进程、注册表设置、计划程序、安全性、服务、共享以及很多其他的操作系统组件和配置设置。网络管理。您可以创建基于WMI的脚本来管理网络服务,例如DNS、DHCP和启用SNMP的设备。实时健全监视。使用WMI事件订阅,您可以编写代码以在事件发生时监视并响应事件日志项,监视并响应文件系统、注册表修改及其他实时的操作系统更改。基本上对WMI来说,WMI事件订阅和通知是在SNMP环境中SNMP陷阱是什么。Windows.NET企业服务器管理。您可以编写脚本来管理MicrosoftApplicationCenter、OperationsManager、SystemsManagementServer、InternetInformationServer、ExchangeServer和SQLServer。返回页首快速启动到WMI脚本为了让您对WMI脚本是什么有一些概念,让我们来看看一个表面看来不怎么重要的任务检索安装在基于Windows的远程计算机中的物理内存的总量。在WMI之前,如果没有另外的第三方工具,是不能通过一个脚本来轻松完成这个任务的。实际上,在WMI之前,使用包括操作系统工具的工具确定安装在计算机中内存数量的惟一方法是通过系统属性对话框。今天,如果目标计算机上安装了WMI,并且有计算机的管理员访问权限,您就可以使用一个WMI脚本来检索在远程Windows计算机上安装的物理内存量,如清单1中所示的一样简单。清单1:使用WMI和VBScript检索总物理内存strComputer=atl-dc-01SetwbemServices=Getobject(winmgmts:&strComputer)SetwbemObjectSet=wbemServices.InstancesOf(Win32_LogicalMemoryConfiguration)ForEachwbemObjectInwbemObjectSetWScript.EchoTotalPhysicalMemory(kb):&wbemObject.TotalPhysicalMemoryNext要运行清单1中的示例脚本,将其复制并粘贴到您最常用的文本编辑器中(notepad.exe也可以),将分配给strComputer变量的值更改为域中一个有效的启用WMI的计算机,保存脚本(扩展名为.vbs),并如图1所示运行脚本。图1:GetMemory.vbs输出有点不可思议,无须任何录入,您应该会看到目标计算机的物理内存量回显到控制台。现在,在你说“天哪!真的用六行脚本来检索一台计算机中的内存数量?”之前,让我们先礼貌地插几句话,因为至今尚不明显的是,您可以使用与在清单1中所演示的相同的基本步骤,从任何通过WMI公开的Windows资源检索配置和状态信息。假设您想要检索安装在一台远程计算机上的所有服务的名称、状态和启动类型。清单2中的示例脚本完全使用清单1中使用过的相同的基本步骤来完成。清单2:使用WMI和VBScript检索服务信息strComputer=atl-dc-01SetwbemServices=Getobject(winmgmts:&strComputer)SetwbemObjectSet=wbemServices.InstancesOf(Win32_Service)ForEachwbemObjectInwbemObjectSetWScript.EchoDisplayName:&wbemObject.DisplayName&vbCrLf&_State:&wbemObject.State&vbCrLf&_StartMode:&wbemObject.StartModeNext运行清单2生成如图2中所示的输出。图2:GetServices.vbs输出假设您对服务不感兴趣,但是需要从Windows事件日志检索记录。再次使用清单1中的脚本模板,您可以很容易地读取Windows事件日志,如清单3中所演示。在您运行清单3之前我们要指出的是,如果您的事件日志包含数千个记录,示例脚本可能需要用很长的时间运行。清单3:读取Windows事件日志记录strComputer=atl-dc-01SetwbemServices=Getobject(winmgmts:&strComputer)SetwbemObjectSet=wbemServices.InstancesOf(Win32_NTLogEvent)ForEachwbemObjectInwbemObjectSetWScript.EchoLogFile:&wbemObject.LogFile&vbCrLf&_RecordNumber:&wbemObject.RecordNumber&vbCrLf&_Type:&wbemObject.Type&vbCrLf&_TimeGenerated:&wbemObject.TimeGenerated&vbCrLf&_Source:&wbemObject.SourceName&vbCrLf&_Category:&wbemObject.Category&vbCrLf&_CategoryString:&wbemObject.CategoryString&vbCrLf&_Event:&wbemObject.EventCode&vbCrLf&_User:&wbemObject.User&vbCrLf&_Computer:&wbemObject.ComputerName&vbCrLf&_Message:&wbemObject.Message&vbCrLfNext如果我们仔细检查清单1、2和3,我们会得出关于这三个脚本的两个非常重要的观察结果。第一个观察结果是,所有三个脚本都执行相同的三个步骤:脚本连接到WMI,检索一个WMI托管资源,并回显资源的几个属性。第二个重要的观察结果是,在每个脚本中,惟一的更改是标识目标资源的类名(即分别为Win32_LogicalMemoryConfiguration、Win32_Service和Win32_NTLogEvent),以及资源的相应属性。脚本中使用的三个步骤,对于任何用于检索WMI托管资源信息的WMI脚本来说是共同的。让我们稍详细一些地看一下每个步骤。步骤1:连接到WMI服务在任何WMI脚本中,第一个步骤都是建立一个到目标计算机上的Windows管理服务的连接。连接到在本地或远程计算机上的WMI与调用VBScript的Getobject函数并将WMI脚本库的名字对象的名称(即“winmgmts:”,后跟目标计算机的名称)传递到Getobject一样简单。用这种方法连接到WMI,返回一个对SWbemServices对象的引用,我们使用清单1、2、3中的名为wbemServices的变量来引用该对象。SWbemServices是在WMI脚本库中定义的一打左右的对象中的一个。WMI脚本库提供一组用于访问WMI基础结构的通用对象脚本。一旦有一个对SWbemServices对象的引用,您就可以调用任何提供了SWbemServices的方法;InstancesOf就是此种方法中的一个。步骤2:检索WMI托管资源的实例普遍认为,第二个步骤主要取决于要执行的任务。在检索WMI托管资源的信息中,步骤2与调用SWbemServices对象的InstancesOf方法一样简单。正如方法名所示,InstancesOf返回由资源的类名标识的托管资源的所有实例。InstancesOf以一个SWbemObjectSet集合的形式返回所需的资源,通过使用名为wbemObjectSet的变量我们在清单1、2、3中引用它。SWbemObjectSet是WMI脚本库中定义的另一个脚本对象。步骤3:显示WMI托管资源的属性最后一个步骤是枚举SWbemObjectSet集合的内容。SWbemObjectSet中的每个项都是一个SWbemObject(WMI脚本库中的另外一个对象)表示所需资源的一个单个实例。使用SWbemObject来访问托管资源类定义中定义的方法和属性。那么,如果从WMI检索信息的脚本编写步骤都是相同的,Win32_LogicalMemoryConfiguration、Win32_Service和Win32_NTLogEvent类是什么呢?此外,它们来自哪里?哪些其他的类是可用的?还有,如何使用它们?这些问题的答案分散在构成WMI体系结构的各组件中。让我们来看一下。返回页首WMI体系结构WMI体系结构由三个主层组成,如图3所示:托管资源WMI基础结构使用者图3:WMI体系结构我们将从最低层开始,因为资源是驻留在那里的。托管资源托管资源是任意逻辑或物理组件,通过使用WMI进行公开和管理。可以使用WMI管理的Window

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论