WMI介绍和实例使用

WMI介绍和实例使用

WMI —— Windows Management Instrumentation【推荐新的MI】

Windows Management Instrumentation大多会被翻译为“Windows管理规范”,Instrumentation含义为仪器仪表、器乐谱写等,类似可以操作的界面或规范或手册一类,也可以看做“工具”,但明显和实用类的工具含义上有所不同。百度百科中为“插桩”,指的是获取计算机软件或者硬件状态的数据的技术,具体解释很贴切,但是“插桩”两个字感觉很“陌生”,不贴切。

WMI就是用来获取Windows系统信息(软硬件、网络等)的技术,并提供可供vbs、powershell、.NET/C#等各种编程语言使用的接口。

WMI底层是基于COM的。同时WMI在性能上并不是很好。

WMI目前已经不推荐使用,其最新版本(或替代品)为 Windows Management Infrastructure(MI),它与WMI完全兼容,使用WMI方式可以访问MI,现代编程更推荐直接使用MI。

Why Use MI?介绍到,MI使用新的本地API和.NET API(不再需要使用复杂的COM代码与WMI交互),SDK开箱即用,减少开发时间;与PowerShell紧密集成;基于最新的标准。

其具体使用可直接参见官方文档。How to Implement a Managed MI Client

WMI介绍

WMI出现至今已经二十多年,很多人一般对它并不熟悉。虽然很好很强大,但是似乎使用很少、具体是什么也不清楚。

WMI有一组API。

通过WMI向外暴露的一组API,使用VBScript、PowerShell脚本或利用C#,可以访问 WMI 的类库。这些API是在系统安装WMI模块的时候安装的,通过它们能够拿到我们想要的类和信息。

WMI有一个存储库。

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

【此处参考自下面列出的:WMI入门(一):什么是WMI。“蓝图”两个字感觉太让人摸不着头脑了,然后搜了多资料都没找到“蓝图”对应的英文到底什么?】

WMI有一个Service。

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

WMI是可扩展的。

WMI可以获取或操作各种系统信息,读取本机硬盘信息、内存信息、网络信息、读取远程计算机的用户信息、读取域用户信息、重启、关机、关闭进程、创建进程等等。基本上,你能想到的获取或者更改资源的操作,它都能干。WMI之所以功能这么强大,是基于WMI的可扩展性。

WMI对资源的各种操作,完全取决于向它注册的提供程序,并不是它自己实现了什么方法。

WMI存储库是用于存储WMI静态数据的存储空间。WMI服务扮演着WMi提供者、管理应用和WMI存储库之间的协调者角色,一般来说,它是通过一个共享的服务进程Svchost来实施工作的。

WMI服务和上层应用之间是通过COM/DCOM接口来实现的

WMI本身的组织架构是一个数据库架构,WMI 服务使用 DCOM(TCP 端口135)或 WinRM 协议(SOAP–端口 5985)。

WMI的简单使用

WMI的使用通常的方法一般是 PowerShell 中,此外则是VB Script、.NET中。

比如,powershell 中获取本机安装的所有软件列表:

Get-WmiObject -Class Win32_Product | select name

C# 操作 WMI 获得本机安装软件的列表:

ManagementPath wmiPath = new ManagementPath(@"\\.\root\cimv2:Win32_Product");

using 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的类是以命名空间和继承层次方式组织的,呈树形结构。

命名空间的根是root,在它的下面还有十几个命名空间,最常用的是root\cimv2。命名空间的信息存储在静态类__Namespace类中,要查询当前命名空间下的所有命名空间,可以查看__Namespace类的实例。

以下是使用PowerShell查询到的命名空间:

PS ...> Get-WmiObject -Class __namespace -Namespace root | select name

name

----

subscription

DEFAULT

MSAPPS11

CIMV2

msdtc

Cli

SECURITY

HyperVCluster

SecurityCenter2

RSOP

PEH

WebAdministration

StandardCimv2

WMI

directory

Policy

virtualization

Interop

Hardware

ServiceModel

SecurityCenter

Microsoft

aspnet

Appv

此外,__Win32Provider类可以查询当前系统中有哪些提供程序。

CIM_*类是WMI的核心类和公共类,很多时候也被称为CIM核心类和公共类。

Win32_*是Win32扩展类,查询实例大多在Win32扩展类中查询。例如Win32_Product、Win32_LogicalDisk等。

关于WMI类的查找,可以从以下几个官方地址入手:

WMI Reference

Win32 Classes

WMI Providers

Powershell 使用 WMI 查询实例

Powershell 查询 BIOS 信息

Get-WmiObject -Class Win32_BIOS

Powershell 查询计算机信息

Get-WmiObject -Class Win32_Operatingsystem

Powershell 查询命名空间

Get-WmiObject -Class __namespace -Namespace root | select name

Powershell 查询杀毒软件

Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct

#注意:在旧版中查询杀软的WMI命名空间为 SecurityCenter

Powershell 操作 WMI 的对象使用的是内置模块

Get-WmiObject,常见查询的类为

Win32_Service、

Win32_BaseService、

Win32_TerminalService、

Win32_SystemDriver

使用 wmic 操作 WMI

wmic是管理WMI的一个工具或组件,可以直接在命令行工具中作为命令使用。通常在第一次使用时会进行安装。

查询系统版本

> wmic os get caption

Caption

Microsoft Windows 10 专业版

查询系统结构

> wmic os get osarchitecture

OSArchitecture

64-bit

wmic OS get Caption,CSDVersion,OSArchitecture,Version

查询本机所有盘符

> fsutil fsinfo drives

驱动器: C:\ D:\ E:\ I:\ Z:\

> wmic logicaldisk list brief

DeviceID DriveType FreeSpace ProviderName Size VolumeName

C: 3 7604596736 310957813760 SSDOS

D: 3 83163639808 189146894336 新加卷

E: 2 7084277760 123010543616 TC

I: 5

Z: 5

> wmic logicaldisk get description,name,size,freespace /value

Description=Local Fixed Disk

FreeSpace=7603585024

Name=C:

Size=310957813760

Description=Local Fixed Disk

FreeSpace=83163017216

Name=D:

Size=189146894336

Description=Removable Disk

FreeSpace=7084277760

Name=E:

Size=123010543616

Description=CD-ROM Disc

FreeSpace=

Name=I:

Size=

Description=CD-ROM Disc

FreeSpace=

Name=Z:

Size=

查看系统中⽹卡的IP地址和MAC地址

wmic nicconfig get ipaddress,macaddress

⽤户列表

wmic useraccount list brief

查看当前系统是否有屏保保护,延迟是多少

wmic desktop get screensaversecure,screensavertimeout

域控机器

wmic ntdomain list brief

查询杀毒软件

需要在cmd中执行。

wmic /namespace:\\root\securitycenter2 path antispywareproduct GET displayName,productState, pathToSignedProductExe && wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState, pathToSignedProductExe

查询启动项

wmic startup list brief | more

wmic startup list full

获取打补丁信息

wmic qfe list

获取BIOS主板序列号

wmic bios get serialnumber

参考

WMI入门(一):什么是WMI

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

WMI 体系结构

WMI的讲解(是什么,做什么,为什么),内容介绍并没有标题写得那么好。

另,推荐Windows WMIC命令使用详解(附实例)

相关推荐

个人房屋出售怎么写?房屋出售信息模板
英国365bet网址

个人房屋出售怎么写?房屋出售信息模板

我对自己的要求很简单--陆俊将执法世界杯
365bet-亚洲版官网

我对自己的要求很简单--陆俊将执法世界杯

如何清除视频中的马赛克,如何清除视频中的马赛克
365bet官网平台

如何清除视频中的马赛克,如何清除视频中的马赛克

智慧食堂的自动绑卡功能:如何让员工餐补管理更高效?
365bet-亚洲版官网

智慧食堂的自动绑卡功能:如何让员工餐补管理更高效?

我的前半生老金结局 罗子君为什么和老金分手
365bet官网平台

我的前半生老金结局 罗子君为什么和老金分手

电脑上怎么运行手机APP(电脑上运行手机APP的4种方法)
365bet官网平台

电脑上怎么运行手机APP(电脑上运行手机APP的4种方法)