WMI介绍和实例使用

简介: Windows Management Instrumentation 大多会被翻译为“Windows管理规范”,Instrumentation 含义为仪器仪表、器乐谱写等......

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_ProductWin32_LogicalDisk等。

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

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_ServiceWin32_BaseServiceWin32_TerminalServiceWin32_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

参考

相关文章
|
安全 Shell Windows
WMI使用学习笔记(下)
WMI使用学习笔记
191 0
|
网络协议 数据安全/隐私保护 Windows
WMI使用学习笔记(上)
WMI使用学习笔记
171 0
|
C++ Windows
windows启动单个进程实例(系统中只有一个运行实例)
windows启动单个进程实例(系统中只有一个运行实例)
234 0
windows启动单个进程实例(系统中只有一个运行实例)
WMI 异常问题,重置WMI
分享一个WMI 异常问题,重置WMI的案例
WMI 异常问题,重置WMI
|
Windows 开发工具 C#