其他分享
首页 > 其他分享> > 使用WMI或CIM

使用WMI或CIM

作者:互联网

使用WMI或CIM

一、什么是WMI ?

WMI是英文“Windows Management Instrumentation”的缩写,翻译过来是Windows管理规范

通俗的讲,WMI是一个技术或者规范,微软根据它开发出了一系列的东西。

主要有以下内容:

1、WMI 有一组 API

WMI有一组对外暴露的API,可供其他语言,如C#、VBScriptPowerShell来调用。

2、WMI 有一个存储库

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

3、WMI 有一个 Service

WMI有一个一直运行的Windows服务,名称为Winmgmt,可以响应用户的访问。

二、如何使用WMI?

PowerShell有两个Cmdlet,分别为Get-WinObjectGet-CimInstance

这两个cmdlet可以结合"-class <WMI-Class>"以及一些其他参数进行使用。

WMI cmdlet 已弃用 ,建议使用Get-CimInstance替代Get-WinObject

2.1、使用 Get-WmiObject

Get-WmiObject的语法结构:

Get-WmiObject 
[[-Class] <System.String>]
[[-Property] <System.String[]>] 
[-Amended] 
[-AsJob] 
[-Authentication {Default | None | Connect | Call | Packet | PacketIntegrity | PacketPrivacy | Unchanged}] 
[-Authority <System.String>] 
[-ComputerName <System.String[]>] 
[-Credential <System.Management.Automation.PSCredential>] 
[-DirectRead] 
[-EnableAllPrivileges] 
[-Filter <System.String>] 
[-Impersonation {Default | Anonymous | Identify | Impersonate | Delegate}] 
[-Locale <System.String>] 
[-Namespace <System.String>] 
[-ThrottleLimit <System.Int32>] 
[<CommonParameters>]
Get-WmiObject 
[[-Class] <System.String>] 
[-Amended] 
[-AsJob] 
[-Authentication {Default | None | Connect | Call | Packet | PacketIntegrity | PacketPrivacy | Unchanged}] 
[-Authority <System.String>] 
[-ComputerName <System.String[]>] 
[-Credential <System.Management.Automation.PSCredential>] 
[-EnableAllPrivileges] 
[-Impersonation {Default | Anonymous | Identify | Impersonate | Delegate}] 
[-List] 
[-Locale <System.String>] 
[-Namespace <System.String>] 
[-Recurse] 
[-ThrottleLimit <System.Int32>] 
[<CommonParameters>]
Get-WmiObject 
[-Amended] 
[-AsJob] 
[-Authentication {Default | None | Connect | Call | Packet | PacketIntegrity | PacketPrivacy | Unchanged}] 
[-Authority <System.String>] 
[-ComputerName <System.String[]>] 
[-Credential <System.Management.Automation.PSCredential>] 
[-DirectRead] 
[-EnableAllPrivileges] 
[-Impersonation {Default | Anonymous | Identify | Impersonate | Delegate}] 
[-Locale <System.String>] 
[-Namespace <System.String>] 
-Query <System.String> 
[-ThrottleLimit <System.Int32>] 
[<CommonParameters>]
2.1.1 查询 WMI 类名称

使用Get-WmiObject -List 可以列出所有的 WMI对象的类,后接名称可以过滤查询,支持通配符。

查询:Get-WmiObject -List *_processor | Format-Table -Wrap

 NameSpace:ROOT\cimv2

Name                                Methods              Properties
----                                -------              ----------
CIM_Processor                       {SetPowerState, Rese {AddressWidth, Availability, Caption, ConfigManagerErrorCode...
                                    t}                   }
Win32_Processor                     {SetPowerState, Rese {AddressWidth, Architecture, AssetTag, Availability...}
                                    t}
Win32_PerfFormattedData_PerfOS_Proc {}                   {C1TransitionsPersec, C2TransitionsPersec, C3TransitionsPersec,
essor                                                     Caption...}
Win32_PerfRawData_PerfOS_Processor  {}                   {C1TransitionsPersec, C2TransitionsPersec, C3TransitionsPersec,
                                                          Caption...}
2.1.2 使用 WMI 类

使用Get-WmiObject -Class &lt;WMI-Class&gt; 可以查询指定的 WMI类对象,其中-Class可以省略。

查询主机CPU信息:Get-WmiObject win32_processor

Caption           : Intel64 Family 6 Model 158 Stepping 13
DeviceID          : CPU0
Manufacturer      : GenuineIntel
MaxClockSpeed     : 3000
Name              : Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
SocketDesignation : U3E1

WMI类会自带一些方法和属性,上面列出的:左边的就是属性,右侧的是属性的值。

可以通过".&lt;PropertyName&gt;"获取属性的值,通过”.&lt;MethodName&gt;()“调用WMI对象的方法。

(Get-WmiObject win32_processor).Name

PS C:\> (Get-WmiObject win32_processor).Name
Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
2.1.3 小结

使用”Get-WmiObject -List &lt;ClassName&gt;“查询WMI类名称,使用”Get-WmiObject &lt;ClassName&gt;“直接使用WMI类,同时配合Get-Member查询对象的方法和属性。

2.2、使用 Get-CimInstance

​ PowerShell 版本 3.0 中引入了 通用信息模型 (CIM) cmdlet。CIM cmdlet 的设计目的是使其可以同时在 Windows 和非 Windows 计算机上使用。

​ 由于 WMI cmdlet 已弃用,因此建议使用 CIM cmdlet 代替 WMI cmdlet。

2.2.1 查询 CIM 类名称

​ 可以通过Get-CimClass命令查询CIM类的名称,支持通配符,-Class 可省略。

Get-CimClass *_processor

PS C:\> Get-CimClass *_processor

   NameSpace:ROOT/cimv2

CimClassName                        CimClassMethods      CimClassProperties
------------                        ---------------      ------------------
CIM_Processor                       {SetPowerState, R... {Caption, Description, InstallDate, Name...}
Win32_Processor                     {SetPowerState, R... {Caption, Description, InstallDate, Name...}
Win32_PerfFormattedData_PerfOS_P... {}                   {Caption, Description, Name, Frequency_Object...}
Win32_PerfRawData_PerfOS_Processor  {}                   {Caption, Description, Name, Frequency_Object...}
2.2.2 使用 CIM 类

使用CIM类是用的Get-CimInstance命令。使用方法和”Get-WmiObject“类似,只是显示的东西比”Get-WmiObject“更少。

Get-CimInstance -Class Win32_Processor

PS C:\> Get-CimInstance -Class Win32_Processor

DeviceID Name                                    Caption                                MaxClockSpeed SocketDesignation
-------- ----                                    -------                                ------------- -----------------
CPU0     Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz Intel64 Family 6 Model 158 Stepping 13 3000          U3E1
2.2.3 小结

Get-CimInstance“和”Get-WmiObject“使用方式类似,只是有一个专门的命令可以查询WMI或CIM类的信息。

附录 1: 其他 WMI命令

PS C:\> Get-Command *WMI* -CommandType Cmdlet

CommandType     Name                Version    Source
-----------     ----                -------    ------
Cmdlet          Get-WmiObject       3.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Invoke-WmiMethod    3.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Register-WmiEvent   3.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Remove-WmiObject    3.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Set-WmiInstance     3.1.0.0    Microsoft.PowerShell.Management

附录 2: 其他 CIM命令

PS C:\> Get-Command -Module CimCmdlets

CommandType     Name                             Version    Source
-----------     ----                             -------    ------
Cmdlet          Export-BinaryMiLog               1.0.0.0    CimCmdlets
Cmdlet          Get-CimAssociatedInstance        1.0.0.0    CimCmdlets
Cmdlet          Get-CimClass                     1.0.0.0    CimCmdlets
Cmdlet          Get-CimInstance                  1.0.0.0    CimCmdlets
Cmdlet          Get-CimSession                   1.0.0.0    CimCmdlets
Cmdlet          Import-BinaryMiLog               1.0.0.0    CimCmdlets
Cmdlet          Invoke-CimMethod                 1.0.0.0    CimCmdlets
Cmdlet          New-CimInstance                  1.0.0.0    CimCmdlets
Cmdlet          New-CimSession                   1.0.0.0    CimCmdlets
Cmdlet          New-CimSessionOption             1.0.0.0    CimCmdlets
Cmdlet          Register-CimIndicationEvent      1.0.0.0    CimCmdlets
Cmdlet          Remove-CimInstance               1.0.0.0    CimCmdlets
Cmdlet          Remove-CimSession                1.0.0.0    CimCmdlets
Cmdlet          Set-CimInstance                  1.0.0.0    CimCmdlets

参考:

1.WMI入门(一):什么是WMI https://www.cnblogs.com/ceachy/archive/2013/03/21/WMI_What.html

2.使用WMI:

https://docs.microsoft.com/zh-cn/powershell/scripting/learn/ps101/07-working-with-wmi

目录:返回我的PowerShell笔记

标签:WmiObject,Name,Get,0.0,CIM,WMI,使用,Cmdlet
来源: https://blog.51cto.com/3chou/2563030