C#操作WMI指南
WMI应用(一个系统自带的测试WMI语句的工具)
1. 开始-运行-输入:wbemtest 回车
2. 单击"连接", 输入:root\cimv2 回车; 或者ROOT\SecurityCenter
3. 单击"查询", 输入:
SELECT * FROM Win32_Process 应用; 或者SELECT * FROM AntiVirusProduct
//程序:
SELECT * FROM Win32_Product;
//进程PID
SELECT * FROM Win32_Process;
//BIOS信息
SELECT * FROM Win32_ComputerSystemProduct;
//磁盘列表
SELECT * FROM Win32_LogicalDisk
//主板信息
Select * from Win32_BaseBoard
//光驱
Select * from Win32_CDROMDrive
//BIOS
Select * from Win32_BIOS
//操作系统
SELECT * FROM Win32_OperatingSystem
//服务列表
SELECT * FROM Win32_Service
//内存
Select * from Win32_PhysicalMemory
//键盘信息
Select * from Win32_Keyboard
//Modem
Select * from Win32_POTSModem
C#操作WMI
你可以下载 WMI SDK , 并且可以下载 WMI Code Creator v1.0 来生成 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连接远程计算机是很方便的,可以参考下面的格式
ManagementObjectCollection queryCollection;
System.Management.ObjectQuery oq;
string machineName = "110.119.110.1"; //连接的目标机的IP地址或者机器名
co.Username = "YourName"; //连接需要的用户名
co.Password = "YourPassword"; //连接需要的密码
string connectString = "SELECT * FROM Win32_PnPSignedDriver"; //查询字符串
System.Management.ManagementScope ms = new System.Management.ManagementScope("\\\\" + machineName + "\\root\\cimv2", co);
oq = new System.Management.ObjectQuery( connectString );
query = new ManagementObjectSearcher( ms, oq );
queryCollection = query.Get();
通过IP地址,用户名和密码就建立了一个可以查询Win32_PnPSignedDrvier这个类(关于这个类的详细信息请查询MSDN)所有信息的连接。现在我们就可以远程获取目标机器上的所有Pnp驱动的信息了。是不是很方便?在得到所有的信息后,我们可以通过下面的两种方式来获取我们需要的属性
{
// string hardwareID = mo["HardwareID"]); //直接根据属性名得到属性的值
//遍历所有属性,得到所有属性的值
PropertyDataCollection searcherProperties = mo.Properties;
foreach (PropertyData sp in searcherProperties)
{
Console.WriteLine("Name = {0, -20}, Value = {1, -20}", sp.Name,sp.Value);
}
}
3 使用WMI连接本地计算机
使用WMI连接本地计算机也是非常方便的,我们只需要稍微修改一下上面的代码就可以了。
co.Username = "";
co.Password = "";
也可以用比较简单的格式,直接使用查询语句。
SelectQuery selectQuery = new SelectQuery( connectString );
ManagementObjectSearcher searcher = new ManagementObjectSearcher( selectQuery );
foreach (ManagementObject mo in searcher.Get())
{
PropertyDataCollection searcherProperties = mo.Properties;
foreach (PropertyData sp in searcherProperties)
{
Console.WriteLine(sp.Name + " " + sp.Value);
}
}
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'"
C#操作WMI指南的更多相关文章
- ASP.NET操作WMI
WMI Functions from ASP.NET Introduction This article demonstrates how to use WMI in ASP.NET to cre ...
- C#中操作WMI的类库-实现远程登录共享
WMI是Windows Management Instrumentation的简称,即:视窗管理规范.在Windows 2000或以后的版本中均安装得有,NT4.0则需要安装WMI的核心组件.通过WM ...
- C#操作WMI文章汇总
http://blog.csdn.net/linux7985/article/details/5698932 http://www.cnblogs.com/ocean2000/archive/2008 ...
- Mac OS X常用操作入门指南
前两天入手一个Macbook air,在装软件过程中摸索了一些基本操作,现就常用操作进行总结, 1关于触控板: 按下(不区分左右) =鼠标左键 control+按下 ...
- thinkPHP 3.2.3操作MongoDB指南
今天使用thinkPHP操作MongoDB发现跟用MYSQL有很多不同的地方,在这里特别跟大家分享下. 暂时没用thinkPHP5一直还在用thinkPHP3.2.3觉得挺好用,MongoDB版本2和 ...
- git操作实战指南
1 背景 小白进入公司,进入日常多人开发,git的使用应该是新人要掌握的第一个技能.git是一个分布式数据存储库,分为远程存储和本地存储,本地存储的话,每一台计算机就相当于一个存储数据库,可以记录和存 ...
- Selenium Grid操作使用指南
一.实现串行多浏览器执行脚本1.启动selenium-server-standalonejava -jar selenium-server-standalone-2.44.0.jar2.脚本代码 fr ...
- 使用Python玩转WMI
最近在网上搜索Python和WMI相关资料时,发现大部分文章都千篇一律,并且基本上只说了很基础的使用,并未深入说明如何使用WMI.本文打算更进一步,让我们使用Python玩转WMI. 1 什么是WMI ...
- WMI入门
转:http://www.cnblogs.com/ceachy/archive/2013/03/21/WMI_What.html WMI入门(一):什么是WMI WMI出现至今已经二十多年了,但很多人 ...
随机推荐
- 使用Cesium的地下渲染技术可视化瑞士的地质资源
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Camptocamp为瑞士拓扑的孪生数字增加了地下可视化功能. ...
- MySQL函数学习(一)-----字符串函数
一.MySQL 字符串函数 \ 函 数 名 称 作 用 完 成 1 LENGTH 计算字符串字节长度 勾 2 CONCAT 合并字符串函数,返回结果为连接参数产生的字符串,参数可以是一个或多个 勾 3 ...
- k8s-基础篇
搭建k8s环境 Myapp镜像部署扩容pod自愈负载均衡DNS外网访问滚动更新YAML方式部署独立部署podRS副本控制器Deployment-自动扩容Deployment-更新版本Deploymen ...
- 微服务架构 | 10.3 使用 Zipkin 可视化日志追踪
目录 前言 1. Zipkin 基础知识 1.1 Zipkin 链路监控的原理 2. 下载 Zipkin 服务器 2.1 下载 zipkin-server-2.12.9-exec.jar 包 2.2 ...
- ApacheCN 捐赠名单 2019
这是 ApacheCN 的捐赠名单,不是龙哥盟博客的(关于 ApacheCN). 最新的名单请见 https://home.apachecn.org/donate/. 捐赠者 金额(元) 时间 收入类 ...
- Net6 DI源码分析Part5 在Kestrel内Di Scope生命周期是如何根据请求走的?
Net6 DI源码分析Part5 在Kestrel内Di Scope生命周期是如何根据请求走的? 在asp.net core中的DI生命周期有一个Scoped是根据请求走的,也就是说在处理一次请求时, ...
- JavaScript与java语法区别
网页中各种技术的作用 感谢大佬:https://blog.csdn.net/RookiexiaoMu_a/article/details/89052768 HTML 制作网页的结构 CSS 美化网页 ...
- Token+Redis实现接口幂等性
一.什么是 幂等性 在编程中,幂等性的特点就是其任意多次执行的效果和一次执行的效果所产生的影响是一样的. 二.Token+Redis的实现思路 1.数据提交前要向服务的申请 token(用户登录时可以 ...
- API 接口的安全设计验证:ticket,签名,时间戳
一.背景 1.与前端对接的API接口,如果被第三方抓包并进行恶意篡改参数,可能会导致数据泄露,甚至会被篡改数据 2.与第三方公司的接口对接,第三方如果得到你的接口文档,但是接口确没安全校验,是十分不安 ...
- js实现用按钮控制网页滚动、以及固定导航栏效果
实现效果如下: 页面内有三个按钮,分别控制页面向上.向下移动,以及暂停,并设置有导航栏,在滚动到某一位置时显示.且当用户主动控制鼠标滑轮时,滚动效果自动关闭.本页面只是演示如何实现,进行了简单的布局, ...