WMI笔记1

C:\>wbemtest.exe开始wmi测试器工具
dcomcnfg打开服务
启动wmi配置程序wmimgmt.msc
wmic.exe是wmi命令行工具
多数为 Windows 托管资源建模的类驻留在 root/cimv2 命名空间中
wmi(windows 管理设备) 是windows 环境自动管理方案,它建立在“公共信息模型”(cim)这个工业标准的基础上。
COM(组件对象模型)
com 是以面向对象设计的原理为基础的。它定义了一个环境,其中包括多个独立的软件部件(对象)。通过接口,任何脚本或程序都可访问这些对象的属性和方法。也可容易地确定一个特定的接口是否可用,因为每个com部件在进行安装的时候,都会向操作系统注册。

Windows Scritp Host(WSH)是一个环境,在这个环境中不同的脚本引擎可以解析执行包含在基本文本的脚本中的代码。wsh有两个引擎,它们是为vbScript和JScript构建的。当执行脚本时,你要指定你想使用的宿主程序(也就是wscript.exe,或csript.exe)并提供脚本的扩展名称(根据你使用的脚本语言选择相应的扩展名.vbs或.js)。

FileSystemObject对象模型:
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
一旦创建,根对象就允许访问模型的其他部件:
Drives(Drive 对象的集合):包括软盘,可移动的和永久磁盘以及网络映射
Folders(Folder对象的集合):包括基于系统的文件夹。然而不能支持特殊文件夹,比如回收站,打印机和我的电脑。为了访问这些文件夹,你须要使用WScript.Shelll对象
Files(File对象的集合)
TextStream:提供处理文本文件的方法和属性

WMI的起源和概念:
一些年前,几家领头羊的计算机公司(bmc软件,cisco系统公司,inter,micro)决定解决系统管理领域缺少标准的问题。为使它们的努力更加有效,它们联合在一起,开始一个称为基于万维网的企业管理(WBEM,Web Based Enterprise Managnement)的创新行动。后来wbem交给了标准化领导机构-----------分布式管理任务组(DMTF,Distributed Management Task Force).DMTF是一个工业组织,它创建伊始就是要开发一种通用的方法来管理桌面,企业和因特网环境。你可以在http://www.dmtf.org得到更多的详细信息。
DMTF启动了一个称为通用信息模型(CIM,Common Informatin Model)的项目,参与者来自WBEM的初始创建人以及Novell,SunSoft和IBM/Tivoli等公司,CIM想成为一种这样的管理工具,它不受限于任何特定的实现环境。
因为CIM的目标放在面向对象设计(开发一组标准的接口,隐藏实现细节等)目标上,所以CIM是以面向对象原理为基础的。它的类是抽象的,因为它需要在任何环境中表示管理对象(比如系统,设备,应用程序和网络)的一般类型。
CIM规定提供了构建这种模型的一个模型(称为Schema)和一种语言。

CIM Schema
Schema是具有各种特征的组织结构。在cim的条件下,这种结构就是类的层次结构以及它们的方法、属性、限定词,等。Schema定义了类是如何安排的,它们遵循的规则,它们包含了什么,以及它们是如何关联在一起的。有特殊的术语和语法用于描述这种结构。
CIM把管理区域分为物理域和逻辑域,它们分别表示管理环境的物理和逻辑元素。逻辑域可进一步分出如下子域:
系统域----与计算机,应用程序和网络系统(操作系统,设备和进程等)有关
设备域----包含一些部件,以对系统域中的对象(存储,进程等)提供支持
应用程序域---紧紧地围绕着应用程序的生命周期,从它们的安装到更新再到重新安装
网络域-----代表协议,网络访问,拓扑和连接
CIM分为两层---------核心层和普通层。核心层是最抽象的,因为它与域和平台无关。普通层处理特定的域,它与任何平台无关。

WMI(windows 管理设备)是wbem的微软实现。它的设计也反应了cim schema,而且它的很类是从cim(继承它们的属性和方法的模型)派生出来的。

wmi名称空间:
wmi引入名字空间的概念,用于对相同环境中存在的类进行分组。此外,名字空间也用于加强安全限制。
当连接到一个名字空间时会检查用户的安全证书,它们决定了名字空间级别的权限。和类相似,名字空间构成了一个层次结构,类似于文件系统中文件夹的层次结构。
Wmi创建了以下的名字空间:
root:作为所有其他名字空间的占位符。它只包含wmi系统类,这些类与wmi有关也在所有的其它名字空间中出现。(wmi系统类可以容易地通过自己的唯一命名规则:在名字前放两个下划字符)
root\Default----与windows注册表操作有关的主机类
root\Security----用于与windows安全有关的类
root\CIMV2-----包含从CIM Schema派生的类,它们代表着我们最常工作的win32环境

CIM存储库:
cim存储库存储了wmi结构的静态部件,包括类,实例和它们的属性
1.wmi对象路径:
wmi对象路径用于在一个cim存储库中定位类或它的实例。对象路径的第一个元素是目标计算机的名字,前面附加两个反斜杠。如果你访问的是本地系统,这是可选的。本地系统也可通过使用\\符号来指定一。后面跟上了名字空间路径,名字空间通过单反斜杠分开。通常类名追加到名字空间路径后,并在前面缀有一个冒号。如引导本地系统root\CIMV2名字空间中指向Win32_Service类的WMI对象路径是:
\\.\root\CIMV2:Win32_Service(WMI名字要求区分大小写)

为了访问类的特定实例,需要指定这个实例的键属性值。这个值(封闭在引号中)跟上类名、单句号、键属性名和等号。如为访问WMITest1计算机上的工作站服务实例,引导实例的对象路径是:
\\WMITest1\root\CIMV2:Win32_Service.Name="LanmanWorkstation"

WQL是ANSI SQL(由美国标准化组织定为标准)的一个子集。WQL引入了它的次要区别,以适应WMI的特定特性。WQL针对CIM存储库对查询进行公式化。你不能使用WQL来修改,删除或创建类或实例
1》数据,事件和Schema查询
WMI支持三种查询
*数据查询--用于获取类实例,使用如下形式的基本语法:
select property_1,property_2,property_3 from MyClass
它返回特定类的所有实例,包括各自的请求属性集
*事件查询---用于过滤出一个特定事件通知的属性。如你已经知道,事件表征被管理环境的变更。下面的查询将返回MyEventClass事件类的每个实例的3个属性:
select property_1,property_2,property_3 from MyEventClass
每个查询允许添加一些附加的操作符,如:
within-------指定轮询(确定wmi轮询监控事件的频率)或分组间隔(确定wmi收集类似事件的初始事件后的时间)。间隔是一个整数值,表示着秒的数量
group-------分组相同的事件,并为所有的它们生成一个单独的通知。
having-------允许过滤within和group子句收集事件 的通知。它一般与NumberofEvents属性(给出了收集事件的数量)一起使用。这样一来,你就可以侦测,何时特定事件的数量超过了时间间隔中设置的极限。
*Schema查询--------获取类定义,使用的基本语法的形式与其他类型的查询一样:
select * from myClass
2》查询的连接和引用
除了ANSI SQL元素外,WQL也在数据和Schema查询中支持ASSOCIATORS和REFERENCES OF语句
在数据查询中,associators of 语句用于获取与指定的实例有关的所有其他实例。在Schema查询中,它获取了与指定类有关的所有其他类。返回值称为端点
如在windows 2000系统上运行如下数据查询:
associators of {Win32_Service.Name="Browser"}
这个查询一般返回Win32_ComputerSystem的一个实例(对应于root/CIMV2名字空间所连接的系统)和Win32_Service的两个实例:Lanmanworkstation和lanmanserver(对应于这个系统的工作站和服务器)。
在这个例子中,如下查询:
associators of{Win32_Service.Name="ProtectedStorage"}
它将返回Win32_ComputerSystem的一个单独实例和Win32_Servce的4个实例:如果在安装了这些部件的服务器上,则有CertSvc(证书服务),IISADMIN(IIS管理服务),MSMQ(消息队列)和RPC(远程过程调用)。
associators of可以包括where子句,然而它的语法不同于前面介绍的一般的select语句。
references of 弥补了associators of。对于一个特定对象,后者找出连接到它的所有其他对象;前者列出这些联合。
如,在一个典型的系统上,
references of {Win32_Service.Name="Browser"}
它返回Win32_SystemServices联合的一个单独实例和Win32_DependentService联合的二个实例(再说明一下,这取决于安装部件)

associators of返回联合另一端点(所谓的端点)的所有实例。references of 返回联合的实例,它们链接查询中的源实例和它的端点。
它们与其它类型的查询略有不同,更加明确地说,where子句遵循不同的规则。当associators of和的references of语句的where部分包含多个子句时,不能使用and。此外,唯一允许的比较参数是等号,在associators of语句中,where子句还包括下面的附加元素:
AssocClass=Assoc类名
ClassDefsOnly
RequiredAssocQualifier=限定词名
RequiredQualifier=限定词名
ResultClass=类名
ResultRole=属性名
Role=属性名

1.AssocClass=Assoc类名
AssocClass将端点列表限制到一个特定的类(通过AssocClassName参数指定)或由其派生的任何类。实质上,一个端点是联合另一端的部件。如
associators of{win32_directory.Name="c:\\cmdcons"}where AssocClass=win32_SubDirectory
2.ClassDefsOnly
ClassDefsOnly仅限于返回类定义,而不是它们的实例,如:
ASSOCIATORS OF{Win32_Directory.Name="c:\\"}WHERE ClassDefOnly
3.RequiredAssocQualifier=限定词名
当查询端点时RequiredAssocQualifier指定了将使用哪个联合。类是通过限定词来确定它的,它必须是联合类定义的一部分。如
ASSOCIATORS OF {Win32_Directory.Name="c:\\"}WHERE RequiredAssocQualifier=Association这个查询返回与我们原始查询(没有where子句)相同的结果。
4.RequiredQualifier=限定词名
RequiredQualifier类似于前面的子句,但在这个例子中,由“限定词名”参数指定的限定词需要在端点的类定义(或从端点类派生的类)中出现。如
ASSOCIATORS OF{Win32_Directory.Name="c:\\cmdcons"}WHERE RequiredQualifier=dynamic
这个查询返回与我们原始查询(没有where子句)相同的结果。再声明一下,这个运算符的实际应用是有限的,因为大多数的类共享动态,提供程序和UUID限定词
5.ResultClass=类名
ResultClass 把查询返回的一系列端点限制到属于“类名”参数指定的类(或从它派生的类)的端点。如:
ASSOCIATORS OF{Win32_Directory.Name="c:\\"}WHERE ResultClass=win32_Directory
这个查询仅限于返回子文件夹和父文件夹

6.ResultRole=属性名
ResultRole对返回的端点进行了限制,令其在查询的时候在源对象的联合中扮演特定角色。下面是这些角色的一些例子:
GroupComponent---描述了联合一侧的对象,它包含了很多部件之一。
PartComponent---描述了联合一侧的对象,它包含一个在分组之中。
Antecedent-----描述了联合一侧的对象,它是其他对象所依赖的(即联合依赖部分)
Dependent----描述了联合一侧的对象,它依赖于另一个对象(即联合先例部分)
如:
ASSOCIATORS OF {Win32_Directory.Name="c:\\"}WHERE ResultClass=Win32_Directory ResultRole=PartComponent
它仅返回子文件夹
如:ASSOCIATORS OF {Win32_Service.Name="Browser"}WHERE ResultClass=Win32_Service ResultRole = Antecedent会返回Brower服务所依赖的服务。

7.Role=属性名
Role类似于ResultRole,然而,“属性名”参数描述的是源对象的角色,而不是端点的角色。在与源对象服务的联合中,只有服务于这一特定角色的端点才会返回。此时使用的是相同的角色类型(GroupComponent和PartComponent)下面查询返回相同的结果,尽管方法不同:
ASSOCIATORS OF{Win32_Directory.Name="c:\\"}where ResultClass=Win32_Directory Role=PartComponent

REFERENCES OF语句中的WHERE子名限制如下:
*ClassDefsOnly---仅返回联合实例的类定义。这种语法的一个例子在讨论ASSOCIATORS OF语句的上一节进行了展示
*RequiredQualifier=限定词----工作方式类似随ASSOCIATORS OF语句使用的那一个;不过这种情况下,限定词引用的只是一个联合类。
*ResultClass=类名---将返回的联合实例限制为属于“类名”类或从其派生的类的实例
*Role=属性名---角色类型同与ASSOCIATORS OF语句一起使用的是一样的;然而在这种场合下,角色应用于联合类的实例,因此结果不同。
如下面查询:
REFERENCES OF{Win32_Service="Browser"}WHERE Role=Dependent

在WQL中like查询是不允许的
3》换码字符
当构建查询时,你可能碰到这样的一种情形,其中查询字串包含一个对象路径或带双引号或反斜杠字符的属性值。在这样的情形下,你需要向查询解析器指出这些字符是查询字串的一部分。这是通过转码字符完成的。如,一个反斜杠需要在它的前面有另一个反斜杠,以在wql查询中正确地进行解释。

2.使用MOF文件扩展Schema
管理对象格式(MOF,Management Object Format)

数据查询:
1.select 数据查询
一般,select查询允许获取有关属性满足特定条件的实例信息。如你可能想找出在StartMode中被设为Auto的哪些服务没有运行:
select * from Win32_Service where Started='false' and StartMode="Auto"
2.Associators of数据查询
associators of可以返回与wql查询列出实例有关的所有实例的列表。让我们假定你想找出所有实例的列表,它们与工作在你Windows计算机上的工作站服务有关系。你可以通过运行如下语句来处理:associators of {Win32_Service.Name="lanmanworkstation"}
当在脚本中执行这个查询时,请记住整个语句包括在双引号中,所以服务名称也必须放在一组双引号中。
这段脚本可以返回以任何方式与工作站服务有关的所有实例列表。然而它们当中的某些实例不是win32_Services的实例。如果你想把搜索限制到只有Win32_Services,你可以进一步扩展WQL语句。这可以通过使用带有ResultClass关键词的where子句来完成:
associators of {Win32_Service.Name="lanmanworkstation"}where ResultClass=Win32_Service
3.References of数据查询
如果你想找出联合的名称,而不是特定实例相关的实例名称,你可以使用References of查询。这个例子处理前一节使用的相同的工作站服务。
references of {Win32_Service.Name="lanmanworkstation"}
这次脚本的结构也非常类似于我们最初使用的结构,查询的格式明显发生了变化。对象显示了wmi名字空间中实例的路径。

原文地址:https://www.cnblogs.com/wn398/p/2997076.html