转:http://www.cnblogs.com/ceachy/archive/2013/03/21/WMI_What.html

WMI入门(一):什么是WMI

  WMI出现至今已经二十多年了,但很多人对它并不熟悉。知道它很好很强大,但不知道它从哪里来,怎么工作,使用范围是什么?现在我跟大家说说我的理解。。。

  WMI有一组API。我们不管使用VBScript、PowerShell脚本还是利用C#的来访问WMI的类库,都是因为WMI向外暴露的一组API。这些API是在系统安装WMI模块的时候安装的,通过他们我们能够能拿到我们想要的类。

  WMI有一个存储库。尽管WMI的多数实例数据都不存储在WMI中,但是WMI确实有一个存储库,用来存放提供程序提供的类信息,或者称为类的蓝图或者Schema。

  WMI有一个Service。WMI总是能够响应用户的访问,那是因为它有一个一直运行的Windows服务,名字叫Winmgmt。停止这个服务,所有对WMI的操作都将没有反应。

  WMI是可扩展的。人人都知道WMI能干很多事情,读取本机硬盘信息、读取远程计算机的用户信息、读取域用户信息等等。基本上,你能想到的获取或者更改资源的操作,它都能干。可谓吃得少,干得多。它为什么这么能干呢?这基于WMI的可扩展性。WMI对资源的操作,不是它自己实现了什么方法,而完全取决于向它注册的提供程序。

  WMI是管理员日常必备的强大工具之一,是脚本伴侣。当然也可以把一个大型系统建立在WMI以及WMI的提供程序之上。以下给两个使用WMI的例子:

示例一:

本示例利用VB Script检查本机的物理内存量:

strComputer = "."

Set wbemServices = Getobject("winmgmts:\\" & strComputer)
Set wbemObjectSet = wbemServices.InstancesOf("Win32_LogicalMemoryConfiguration") For Each wbemObject In wbemObjectSet
WScript.Echo "Total Physical Memory (kb): " & wbemObject.TotalPhysicalMemory
Next

示例二:
本示例利用PowerShell检查本机的逻辑硬盘情况:

PS C:\Users\v-lukez> Get-WmiObject -Class Win32_LogicalDisk

结语:
  WMI功能强大,而且一直在发展,但是因为用的人不多,所以一直不温不火。希望更多的人能够慧眼识珠,看到的潜力。

WMI入门(二):如何使用WMI

  知道了WMI是什么以后,肯定想要知道如何使用WMI干活。它能写“Hello World”吗?WMI没那么无聊,它一上来就会问你“你想要什么?”或者“你想要更改什么?”。。。

WMI工具

  Windows本身提供了几个WMI工具供用户使用,包括WMIC.exe、WBEMTest.exe和WMI Administrative Tools等。前两个是系统自带的,最后一个需要自己下载安装。不过说实话,我最喜欢WMI Administrative Tools。下载WMI Administrative Tools在这里。下面以WMI Administrative Tools为例说明如何使用工具使用WMI。

  下载并安装WMI Administrative Tools之后,会有4个工具,最常用的是其中的WMI CIM Studio。在开始菜单里单击它,你会发现它是以网页形式在IE浏览器中打开的。

使用步骤如下:

  1、单击页面上部的电脑图标,会显示一个对话框,单击“Connect”按钮,如图1所示;

            图1

  2、任何时候出现如图2所示的登陆对话框,单击OK按钮即可;

            图2

  3、选择合适的命令空间(这里选择常用的root\cimv2),然后单击OK按钮,如图3所示;

            图3

  4、直接双击右侧类名,或者单击上部的望远镜按钮,在弹出的查找对话窗中输入你要查找的完整类名或者类名的一部分,单击Go按钮查找;并在查找结果中选择你要查看的类名,单击OK按钮,如图4所示;

            图4

  5、单击右上部倒数第4个实例按钮,即可得到本机所有安装的软件列表,如图5所示;

            图5

任何WMI类以及实例的查看均可参考以上步骤。

脚本操作WMI

  以前对WMI的操作都是通过VB Script进行的,现在更多人倾向于使用PowerShell来访问WMI类和对象。下面给出使用PowerShell命令查询本机安装的所有软件列表的示例:

PS C:\Users\luke> Get-WmiObject -Class Win32_Product | select name

name
----
HelpDesk
Windows Installer Clean Up
XML Notepad 2007
Microsoft Network Monitor 3.4
Microsoft Visual Studio 2010 Service Pack 1
ScreenRecorder
Microsoft Office Visual Web Developer 2007
Microsoft Office Visual Web Developer MUI (English) 2007
...

比使用带界面的WMI要简单的多,而且还可以有很多筛选条件。

.Net操作WMI

  使用.Net中的高级语言来操作WMI也非常的方便。下面示例演示C#操作WMI获得本机安装软件的列表的代码:

using System;
using System.Management; namespace WMIDemo
{
class Program
{
static void Main(string[] args)
{
ManagementPath wmiPath = new ManagementPath(@"\\.\root\cimv2:Win32_Product");
ManagementClass wmiClass = new ManagementClass(wmiPath); ManagementObjectCollection instances = wmiClass.GetInstances(); Console.WriteLine("Name, Vendor");
foreach (ManagementObject product in instances)
{
Console.WriteLine(String.Format("{0}, {1} ", product["Name"], product["Vendor"]));
}
}
}
}

结语  

  WMI是一个多面手,你个可以从各个测面来使用它。套用一句广告词:关于WMI,你怎么用?

WMI入门(三):我需要的类在哪里?

  使用WMI归根到底是对WMI类的访问,如何找到合适的类是其中关键的一步。我一直在为找不到合适的类和命名空间苦恼。你也有这样的问题吗?

类层次结构

  WMI的类是以命名空间和继承层次方式组织的,呈树形结构。命名空间的根是root,在它的下面还有十几个命名空间,最常用的是root\cimv2。命名空间的信息存储在静态类__Namespace类中,要查询当前命名空间下的所有命名空间,可以查看__Namespace类的实例。以下是在我的机器上使用PowerShell查询到的命名空间:

PS C:\Users\idsswtt> Get-WmiObject -Class __namespace -Namespace root | select name

name
----
subscription
DEFAULT
cimv2
Cli
Nap
MicrosoftIISv2
SECURITY
SmsDm
CCMVDI
RSOP
WebAdministration
ccm
WMI
directory
Policy
virtualization
Interop
Hardware
ServiceModel
Microsoft
aspnet

关于命名空间更详细的信息,可以写一个递归的脚本来取得,或者从WMI入门(二):如何使用WMI中提到的WMI CIM Studio工具中查到。

常用WMI类

  WMI体系结构中有成百上千个类。我们经常用到的只有其中一部分。其中有些是用来查询实例的,另一些用来查询类的Schema的。除了上面提到的__Namespace类,我们还会用到__Win32Provider类,来查询当前系统中都有哪些提供程序。这两个类是系统类。

  此外,还有两类WMI类我们经常用到:CIM_*类和Win32_*类。前者是WMI的核心类和公共类,很多时候也被称为CIM核心类和公共类。后者是Win32扩展类,我们查询实例多在Win32扩展类中查询。例如Win32_Product、Win32_LogicalDisk等。

WMI类查找手册?

  很遗憾的是,到目前为止。我没有发现一个好用的WMI类查找手册。但在微软MSDN网站上,有一个分类。我们可以依照这个分类来做查询。以下几个链接是我经常用到的,贴在这里,希望你能用到。

  WMI Reference

  Win32 Classes

  WMI Providers

结语

  看完上面我写的这些东西,如果你还是找不到你要的类,那你就只能怪微软了。我觉得微软为WMI做的还是太少,至少在类查询这一块儿是这样。在微软为WMI投入更多之前,我们只能依赖经验和搜索引擎来寻找适当的类了。

WMI入门的更多相关文章

  1. WMI入门教程之WMI中的类在哪里?

    Powershell专栏: https://www.jb51.net/list/list_234_1.htm https://www.pstips.net/get-wmiobject-becomes- ...

  2. 【转】PowerShell入门(九):访问.Net程序集、COM和WMI

    转至:http://www.cnblogs.com/ceachy/archive/2013/02/28/PowerShell_DotNet_COM_WMI.html PowerShell可以设计的大而 ...

  3. [EntLib]微软企业库5.0 学习之路——第一步、基本入门

    话说在大学的时候帮老师做项目的时候就已经接触过企业库了但是当初一直没明白为什么要用这个,只觉得好麻烦啊,竟然有那么多的乱七八糟的配置(原来我不知道有配置工具可以进行配置,请原谅我的小白). 直到去年在 ...

  4. BI之SSIS入门最新版Visual Studio调试技巧

    简介 最近公司业务需要用到BI SSIS,SSIS是什么?"SSIS是Microsoft SQL Server Integration Services的简称,是生成高性能数据集成解决方案( ...

  5. 数据库技术丛书:SQL Server 2016 从入门到实战(视频教学版) PDF

    1:书籍下载方式: SQL Server2016从入门到实战 PDF 下载  链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w 学习 ...

  6. UWP开发入门(25)——通过Radio控制Bluetooth, WiFi

    回顾写了许久的UWP开发入门,竟然没有讲过通过Windows.Devices.Radios.Radio来控制Bluetooth和WiFi等功能的开关.也许是因为相关的API设计的简单好用,以至于被我给 ...

  7. VBS脚本编程(10)——编写WMI脚本

    WMI介绍 1.WMI是什么? WMI--Windows管理规范(Windows Management instrumentation). 是一项核心的Windows管理技术. 采用统一的.基于开放标 ...

  8. Reactive UI -- 反应式编程UI框架入门学习(二)

    前文Reactive UI -- 反应式编程UI框架入门学习(一)  介绍了反应式编程的概念和跨平台ReactiveUI框架的简单应用. 本文通过一个简单的小应用更进一步学习ReactiveUI框架的 ...

  9. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

随机推荐

  1. CRM 2013 系统设置新功能一:界面自动保存 及 SDK 中 Xrm.Page.data.entity.save

    CRM 2013 界面会自动保存了..在系统设置中默认“是”,如果不需要可以调整. CRM实体记录在新建时会有出现“保存”按钮,非新建状态下,没有“保存”按钮只有“新建”按钮,系统将会自动为你保存最后 ...

  2. 发布的时候Archive灰色

    主要是因为发布的时候要选为将模拟器选择一下,选为Generic iOS Device. 来自为知笔记(Wiz)

  3. 【读书笔记】iOS-特性

    一,@符号标志着“你将使用Objective-C的特殊用法”.@property是一种新的编译器功能,表示声明了一个新对象属性. 二,@property预编译指令的作用是自动声明属性的setter和g ...

  4. 【读书笔记】iOS-自动释放池

    一,NSObject类提供了一个autorelease方法: -(id)autorelease; 该方法预先设定了一条将来在某个时间发送的release消息,其返回值是接收消息的对象.retain消息 ...

  5. IOS开发中(null)与<null>的处理

    不小心在开发过程中,得到了(null)以及<null>的返回值,找了好长时间只找到了一个关于<null>的. 由于要根据返回值进行判断,做出必要反应,因此必须知道返回值所代表的 ...

  6. Android 网络编程基础之简单聊天程序

    前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下 首先是服务端代码: package com.jiao.socketdemo; import java.io.Buffered ...

  7. git报错 error: cannot stat ‘file’: Permission denied

    切换分支时报错: error: cannot stat ‘file’: Permission denied 解决方法:退出编辑器.浏览器.资源管理器等,然后再切换就可以了.

  8. 1、IOS开发--iPad之仿制QQ空间(登录界面搭建+登录逻辑实现)

    开始搭建登录界面 登录界面效果图: 相关的图片资源下载百度云备份链接: http://pan.baidu.com/s/1o71cvMU 密码: 2h7e 步骤开始: 设置辅助窗口的位置在下方 快捷键o ...

  9. MyCat 学习笔记 第十二篇.数据分片 之 分片事务处理

    1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  330 ...

  10. 烂泥:KVM使用裸设备配置虚拟机

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 何谓裸设备?百度百科显示: 裸设备(raw device),也叫裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊块设备文件 ...