C# 关于WMI_jerryzhao58的博客-程序员宅基地

技术标签: c#  笔记  string  ibm  timezone  C#编程  microsoft  windows  

1 什么是WMI?

Windows Management Instrumentation (WMI)是可伸缩的系统管理结构,该规范采用一个统一、基于标准

且可扩展的面向对象接口。它提供与系统管理员信息和基础WMI API交互的标准方法,主要由系统管理应

用程序开发人员和系统管理员用来访问和操作系统管理信息;它可用来生成组织和管理系统信息的工具,

使系统管理人员能够更密切的监视系统活动。

WMI提供了一套内置在Microsoft Windows操作系统中的丰富的系统管理服务,可以在有大量的应用程序、

服务和设备的系统中提供全方位的管理功能。它允许应用程序的开发者,使用简单的、一致的机制,去查

询企业中的任一台计算机上的信息,或是进行系统配置。

通过WMI接口可以获得的信息量是惊人的,包括硬件设置,状态信息,驱动器配置,BIOS信息,应用程序

的设置,事件记录信息,以及其他。WMI通过一组API来获得信息,但它表征的是一种通过一个简单,工业

标准对象管理模式来获取信息的函数。这使得应用程序的开发者不必学习Windows的每一个API的具体细节

.Net FrameWork SDK对WMI提供了全面的支持,.Net FrameWork SDK为Visual C#能够操作WMI提供了一个

专门的命名空间"System.Management"。在命名空间"System.Management"中提供了大量用以处理和WMI相

关的类、接口和枚举。在使用WMI之前,必须在工程中添加对System.Management.dll的引用,然后声明。

 

2 使用WMI连接远程计算机

系统管理员可以通过目标机器的机器名(或者IP地址),用户名以及密码去查询远程计算机的状态和信息

,以及利用脚本执行一些管理工作。利用WMI连接远程计算机是很方便的,可以参考下面的格式

连接远程计算机示例代码
 1 ManagementObjectSearcher query;     
 2 ManagementObjectCollection queryCollection;
 3 System.Management.ObjectQuery oq;
 4
 5 string machineName = "110.119.110.1"; //连接的目标机的IP地址或者机器名
 6 co.Username = "YourName";                  //连接需要的用户名
 7 co.Password = "YourPassword";           //连接需要的密码
 8 string connectString = "SELECT * FROM Win32_PnPSignedDriver";   //查询字符串
 9
10 System.Management.ManagementScope ms = new System.Management.ManagementScope("\\\\" +

machineName + "\\root\\cimv2", co);
11 oq = new System.Management.ObjectQuery( connectString );
12 query = new ManagementObjectSearcher( ms, oq );
13 queryCollection = query.Get();
通过IP地址,用户名和密码就建立了一个可以查询Win32_PnPSignedDrvier这个类(关于这个类的详细信

息请查询MSDN)所有信息的连接。现在我们就可以远程获取目标机器上的所有Pnp驱动的信息了。是不是

很方便?在得到所有的信息后,我们可以通过下面的两种方式来获取我们需要的属性

读取上一代码获得的内容
 1 foreach ( ManagementObject mo in queryCollection)
 2 {
 3 // string hardwareID     = mo["HardwareID"]); //直接根据属性名得到属性的值
 4
 5 //遍历所有属性,得到所有属性的值
 6 PropertyDataCollection searcherProperties = mo.Properties;
 7 foreach (PropertyData sp in searcherProperties)
 8 {
 9    Console.WriteLine("Name = {0, -20}, Value = {1, -20}", sp.Name,sp.Value);
10 }
11 }
 

 

 

 

3 使用WMI连接本地计算机

使用WMI连接本地计算机也是非常方便的,我们只需要稍微修改一下上面的代码就可以了。

 

1 string machineName = "localhost";
2 co.Username = "";
3 co.Password = "";
4
 

 

也可以用比较简单的格式,直接使用查询语句。

 

简单连接本地代码
 1 string connectString = "SELECT * FROM Win32_PnPSignedDriver";
 2
 3 SelectQuery selectQuery = new SelectQuery( connectString );
 4 ManagementObjectSearcher searcher = new ManagementObjectSearcher( selectQuery );
 5
 6 foreach (ManagementObject mo in searcher.Get())
 7 {
 8 PropertyDataCollection searcherProperties = mo.Properties;
 9 foreach (PropertyData sp in searcherProperties)
10 {
11    Console.WriteLine(sp.Name + "  " + sp.Value);
12 }
13 }
 

 

4 查询语句的格式

上面的连接字符串connectString其实有很多种格式。对于WMI来说,使用WQL查询所需要的信息。WQL继承

了SQL的一些语法。但是并不是说所有SQL的语句都可以用于WQL。常用的格式有如下几种。

(1)查询系统中类中所有对象的所有属性
connectString = "SELECT * FROM Win32_PnPSignedDriver"

(2)查询类中所有对象的HardwareID属性
connectString = "SELECT HardwareID FROM Win32_PnPSignedDriver"

(3)查询类中所有对象的HardwareID和DriverVersion属性
connectString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver"

(4)查询类中所有对象的HardwareID和DriverVersion属性,并且对象的HardwareID必须以IBM254D结尾
connectString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver WHERE

HardwareID like '%IBM254D'"

(5)查询类中所有对象的HardwareID和DriverVersion属性,并且对象的HardwareID必须以Monitor开头
connectString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver WHERE

HardwareID like 'Monitor%'"

(6)查询类中所有对象的HardwareID和DriverVersion属性,并且对象的HardwareID必须是以Monitor开

头,以IBM254D结尾,而且之间只有一个任意的字符
connectString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver WHERE

HardwareID like 'Monitor_IBM254D'"

(7)查询类中所有对象的HardwareID和DriverVersion属性,并且对象的HardwareID必须是以Monitor开

头,以IBM254D结尾,而且之间只有一个任意的字符,还要满足InfName必须是oem18.inf
connectString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver WHERE

HardwareID like 'Monitor_IBM254D' AND InfName='oem18.inf'"

(8)查询类中所有对象的HardwareID和DriverVersion属性,并且对象的HardwareID必须是以Monitor开

头,以IBM254D结尾,而且之间只有一个任意的字符,或者满足InfName是oem18.inf
connectString = "SELECT HardwareID, DriverVersion FROM Win32_PnPSignedDriver WHERE

HardwareID like 'Monitor_IBM254D' OR InfName='oem18.inf'"

4.1常用WMI列表

// 硬件
Win32_Processor, // CPU 处理器
Win32_PhysicalMemory, // 物理内存条
Win32_Keyboard, // 键盘
Win32_PointingDevice, // 点输入设备,包括鼠标。
Win32_FloppyDrive, // 软盘驱动器
Win32_DiskDrive, // 硬盘驱动器
Win32_CDROMDrive, // 光盘驱动器
Win32_BaseBoard, // 主板
Win32_BIOS, // BIOS 芯片
Win32_ParallelPort, // 并口
Win32_SerialPort, // 串口
Win32_SerialPortConfiguration, // 串口配置
Win32_SoundDevice, // 多媒体设置,一般指声卡。
Win32_SystemSlot, // 主板插槽 (ISA & PCI & AGP)
Win32_USBController, // USB 控制器
Win32_NetworkAdapter, // 网络适配器
Win32_NetworkAdapterConfiguration, // 网络适配器设置
Win32_Printer, // 打印机
Win32_PrinterConfiguration, // 打印机设置
Win32_PrintJob, // 打印机任务
Win32_TCPIPPrinterPort, // 打印机端口
Win32_POTSModem, // MODEM
Win32_POTSModemToSerialPort, // MODEM 端口
Win32_DesktopMonitor, // 显示器
Win32_DisplayConfiguration, // 显卡
Win32_DisplayControllerConfiguration, // 显卡设置
Win32_VideoController, // 显卡细节。
Win32_VideoSettings, // 显卡支持的显示模式。

// 操作系统
Win32_TimeZone, // 时区
Win32_SystemDriver, // 驱动程序
Win32_DiskPartition, // 磁盘分区
Win32_LogicalDisk, // 逻辑磁盘
Win32_LogicalDiskToPartition, // 逻辑磁盘所在分区及始末位置。
Win32_LogicalMemoryConfiguration, // 逻辑内存配置
Win32_PageFile, // 系统页文件信息
Win32_PageFileSetting, // 页文件设置
Win32_BootConfiguration, // 系统启动配置
Win32_ComputerSystem, // 计算机信息简要
Win32_OperatingSystem, // 操作系统信息
Win32_StartupCommand, // 系统自动启动程序
Win32_Service, // 系统安装的服务
Win32_Group, // 系统管理组
Win32_GroupUser, // 系统组帐号
Win32_UserAccount, // 用户帐号
Win32_Process, // 系统进程
Win32_Thread, // 系统线程
Win32_Share, // 共享
Win32_NetworkClient, // 已安装的网络客户端
Win32_NetworkProtocol, // 已安装的网络协议

 

Win32_USBHub
Win32_1394Controller
Win32_BaseBoard
Win32_Battery
Win32_BIOS
Win32_Bus
Win32_CacheMemory
Win32_CDROMDrive
Win32_CurrentProbe
Win32_DesktopMonitor
Win32_DeviceMemoryAddress
Win32_DiskDrive
Win32_DisplayConfiguration
Win32_DisplayControllerConfiguration
Win32_DMAChannel
Win32_Fan
Win32_FloppyController
Win32_FloppyDrive
Win32_HeatPipe
Win32_IDEController
Win32_InfraredDevice
Win32_IRQResource
Win32_Keyboard
Win32_MemoryArray
Win32_MemoryDevice
Win32_MotherboardDevice
Win32_NetworkAdapter
Win32_NetworkAdapterConfiguration
Win32_OnBoardDevice
Win32_ParallelPort
Win32_PCMCIAController
Win32_PhysicalMemory
Win32_PhysicalMemoryArray
Win32_PnPEntity
Win32_PointingDevice
Win32_PortableBattery
Win32_PortConnector
Win32_PortResource
Win32_POTSModem
Win32_PowerManagementEvent
Win32_Printer
Win32_PrinterConfiguration
Win32_PrintJob
Win32_Processor
Win32_Refrigeration
Win32_SerialPort
Win32_SerialPortConfiguration
Win32_SMBIOSMemory
Win32_SoundDevice
Win32_SystemEnclosure
Win32_SystemMemoryResource
Win32_SystemSlot
Win32_TapeDrive
Win32_TemperatureProbe
Win32_UninterruptiblePowerSupply
Win32_USBController
Win32_VideoConfiguration
Win32_VideoController
Win32_VoltageProbe

 


5 参考资料和工具
WMI Reference:http://msdn2.microsoft.com/en-us/library/aa394572.aspx
WMI Tools:http://www.microsoft.com/downloads/details.aspx?familyid=6430f853-1120-48db-8cc5

-f2abdc3ed314&displaylang=en
WQL Query:

http://www.microsoft.com/china/technet/community/scriptcenter/topics/win2003/like.mspx#EIB

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/PassEnroll1/article/details/7216059

智能推荐

C# Winform的简易聊天程序_zheng1613的博客-程序员宅基地

基于C# Winform的简易聊天程序[第一篇-两端通信]程序简介本聊天程序支持局域网内部客户端与服务端之间的互相通信. 原理启动服务端后,服务端通过持续监听客户端发来的请求,一旦监听到客户端传来的信息后,两端便可以互发信息了.服务端需要绑定一个IP,用于客户端在网络中寻找并建立连接.信息发送原理:将手动输入字符串信息转换成机器可以识别的字节数组,然后调用套接字

32位汇编学习札记(二)_weixin_30553065的博客-程序员宅基地

win32汇编语言第二章(6.22)win32开发源码的组成win32可执行文件的源码包括两个大的部分:汇编代码和资源文件1.汇编代码:  a. asm文件:我们自己编写的汇编源码  b. windows.inc:系统api的声明文件,在我们的源代码中包含这个头文件后就可以调用windows提供的api。  c. *.inc:用户自定义头文件,我们自己编写的或者第三方函...

ElasticSearch7的基本原理和使用(借用Kibana可视化工具)_菜鸡儿的架构师之路的博客-程序员宅基地_elasticsearch7教程

Elastic SearchElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java...

联想小新air15和thinkbook15有什么区别 哪个好详细性能配置对比_妙龙的博客-程序员宅基地_联想air15与thinkbook15

联想小新air15:2021款分为锐龙版和酷睿版,其中锐龙版的日常价格行情在¥4799.00-¥5199.00之间,酷睿版的价格行情在¥5999.00 -¥6999.00之间选联想小新air15和thinkbook15 哪个好这些点很重要看过你就懂了http://www.adiannao.cn/dythinkbook15:其分为锐龙版和酷睿版,其中锐龙版的日常价格行情在¥4599.00-¥4999.00之间如果平时的用途是办公,上网,追剧,希望买一款性价比更高的笔记本,那么这款联想thinkbook1

JavaOO综合练习题目 -- 宠物管理系统_江湖人称小明的博客-程序员宅基地

JavaOO综合练习题目 – 宠物管理系统题目要求:使用DAO模式开发宠物管理系统:在该宠物系统中,宠物分为狗和企鹅两种。狗的属性有:编号、名称、亲密值、健康值、品种、所属主人编号。企鹅的属性有:编号、名称、亲密值、健康值、性别、所属主人编号。该系统中主人可以领养宠物,主人的属性有:编号、用户名、密码、姓名、地址、电话。要求将狗和企鹅的数据保存到同一张表中,除品种、性别和所属主人编号外,其余列均不允

Java 利用反射机制获取内部类的私有属性和方法,并且修改私有属性的值_Missisy的博客-程序员宅基地_java反射获取私有属性,改变值

废话不多说直接贴代码,代码中有注释,如下:import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class Test { @SuppressWarnings("unused") cla...

随便推点

linux下win加p键,不需其他启动管理软件在一个硬盘上同时安装win98,win2kP,win2ks,winXP,linux,FreeBSD..._weixin_39818631的博客-程序员宅基地

不需其他启动管理软件在一个硬盘上同时安装win98,win2kP,win2ks,winXP,linux,FreeBSD互联网 发布时间:2008-10-08 22:12:25 作者:佚名 我要评论作者:NetDemonemail:[email protected]://www.20cn.net/-----------------------------------------...

从本地硬盘启动计算机,戴尔笔记本电脑设置从硬盘启动的方法_歌未歌的博客-程序员宅基地

《戴尔笔记本电脑设置从硬盘启动的方法》由会员分享,可在线阅读,更多相关《戴尔笔记本电脑设置从硬盘启动的方法(1页珍藏版)》请在人人文库网上搜索。1、戴尔笔记本电脑设置从硬盘启动的方法:1. 启动计算机,并按住DEL键不放(也有按其它键的,请根据提示),直到出现BIOS设置窗口(通常为蓝色背景,黄色英文字)。2. 选择并进入第二项,“AdvancedBIOS Features (高级BIOS功能)选...

基于 SOFAArk 和 SOFADashboard 实现动态模块管控 | Meetup#2 回顾_SOFAStack的博客-程序员宅基地

作者:卫恒(宋国磊)SOFATracer 以及SOFADashboard 开源负责人。本文根据 5月26日 SOFA Meetup#2上海站 《使用 SOFAStac...

增长工程师修炼之道_weixin_30663391的博客-程序员宅基地

前言我的成长四步曲在我成长初期,我制定了一些计划来实现下面的一些能力:能做到你想做的: Tasking与学习能力用更好的方法来实现功能Better Code & Architecture运营(Growth Hacker)除了第一步,每一个步骤都花费了相当长的时间来学习,光在学习方面就差不多一年了。能做到你想做的: Tasking与学习能力虽然这看...

php 请求的所有参数类型,post请求,xhr.send(data)函数的data参数类型有哪些?_猎豹白嘉丽的博客-程序员宅基地

平常项目中一般都是把对象类型的参数序列化之后再传给send,还要设置相应的头部:var params = {'name': 'json','age': 26};xhr.open('post', url, true);xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');xhr.send(serialize...

Redis之延迟监控_一见的博客-程序员宅基地

延迟监控参考官方文档https://redis.io/topics/latency-monitor启用 redis 延迟监控CONFIG SET latency-monitor-threshold 100单位:毫秒,100表示一百毫秒。如果将 latency-monitor-threshold 的值设置为 0,则表示关闭延迟监控。子命令1)LATENCY LATEST返回所有事件的最新延迟样本2)LATENCY HISTORY event返回最多1

推荐文章

热门文章

相关标签