WMI(windows管理规范),是Windows 2K/XP管理系统的核心;对于其他的Win32操作系统,WMI是一个有用的插件。WMI以CIMOM为基础。

CIMOM公共信息模型对象管理器(Common Information Model Object Manager),是一个描述操作系统构成单元的对象数据库,为MMC和脚本程序提供了一个访问操作系统构成单元的公共接口。有了WMI,工具软件和脚本程序访问操作系统的不同部分时不需要使用不同的API;相反,操作系统的不同部分都可以插入WMI,如图所示,工具软件和脚本程序可以方便地读写WMI。


学习目标

  • 获取所有的WMI对象

  • WMI类详细信息显示

  • 使用WMI对计算机信息进行收集

  • 使用WQL语句



WMI对象

  • WMI对象:WmiObject

  • WMI:Windows管理规范

  • WMI将数据视为有一个或多个项目的集合中的对象

  • 通过WMI可以使用较少的工作量执行高级工作


  • 获取WMI对象:Get-WmiObject

  • 显示所有的WMI对象

  • Get-WmiObject-List

  • 可以使用-commputer选项获取远程计算机上的参数



获取本机所有WmiObject 信息

Get-WmiObject --list

wKiom1gsZFuh0RCaAASyLGJQ73g308.png


获取磁盘信息

Get-WmiObject win32_logicaldisk

wKiom1gtUibiuhLPAAFQmOSsecA555.png-wh_50


获取指定磁盘信息

Get-WmiObject win32_logicaldisk | ?{$_.DeviceID -like "C:"}

wKioL1gtVJrzySteAABqiD-0WQg982.png-wh_50



获取C盘剩余空间

(Get-WmiObject win32_logicaldisk | ?{$_.DeviceID -like "C:"}).freespace

wKioL1gtVR3hILHmAAA8nZLg3lM592.png-wh_50



获取CPU信息

Get-WmiObject win32_processor

wKiom1gtVdXiwNyLAAB7wqfuCO8882.png-wh_50

注意:上面是我在虚拟机中执行命令的结果,物理机中信息要比这多很多


查看计算机制造商信息


Get-WmiObject win32_computersystem

wKioL1gtVmmC8HKSAAD_JTGVpdQ358.png-wh_50



获取内存总大小

(Get-WmiObject win32_computersystem).TotalPhysicalmemory

wKioL1gtVveCWDJsAACBObFto5Y810.png-wh_50



查看系统共享目录

Get-WmiObject win32_share

wKiom1gtV6HS9NNdAADVJuRMbKc827.png-wh_50  



查看共享相信信息

Get-WmiObject win32_share | Format-list *
PS C:\Users\Administrator> Get-WmiObject win32_share | Format-list *
PSComputerName   : OPS01-WINTEST01
Status           : OK
Type             : 2147483648
Name             : ADMIN$
__GENUS          : 2
__CLASS          : Win32_Share
__SUPERCLASS     : CIM_LogicalElement
__DYNASTY        : CIM_ManagedSystemElement
__RELPATH        : Win32_Share.Name="ADMIN$"
__PROPERTY_COUNT : 10
__DERIVATION     : {CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER         : OPS01-WINTEST01
__NAMESPACE      : root\cimv2
__PATH           : \\OPS01-WINTEST01\root\cimv2:Win32_Share.Name="ADMIN
AccessMask       :
AllowMaximum     : True
Caption          : Remote Admin
Description      : Remote Admin
InstallDate      :
MaximumAllowed   :
Path             : C:\Windows
Scope            : System.Management.ManagementScope
Options          : System.Management.ObjectGetOptions
ClassPath        : \\OPS01-WINTEST01\root\cimv2:Win32_Share
Properties       : {AccessMask, AllowMaximum, Caption, Description...}
SystemProperties : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY...}
Qualifiers       : {dynamic, Locale, provider, UUID}
Site             :
Container        :
PSComputerName   : OPS01-WINTEST01
Status           : OK
Type             : 2147483648
Name             : C$
__GENUS          : 2
__CLASS          : Win32_Share
__SUPERCLASS     : CIM_LogicalElement
__DYNASTY        : CIM_ManagedSystemElement
__RELPATH        : Win32_Share.Name="C$"
__PROPERTY_COUNT : 10
__DERIVATION     : {CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER         : OPS01-WINTEST01
__NAMESPACE      : root\cimv2
__PATH           : \\OPS01-WINTEST01\root\cimv2:Win32_Share.Name="C$"
AccessMask       :
AllowMaximum     : True
Caption          : Default share
Description      : Default share
InstallDate      :
MaximumAllowed   :
Path             : C:\
Scope            : System.Management.ManagementScope
Options          : System.Management.ObjectGetOptions
ClassPath        : \\OPS01-WINTEST01\root\cimv2:Win32_Share
Properties       : {AccessMask, AllowMaximum, Caption, Description...}
SystemProperties : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY...}
Qualifiers       : {dynamic, Locale, provider, UUID}
Site             :
Container        :
PSComputerName   : OPS01-WINTEST01
Status           : OK
Type             : 2147483648
Name             : D$
__GENUS          : 2
__CLASS          : Win32_Share
__SUPERCLASS     : CIM_LogicalElement
__DYNASTY        : CIM_ManagedSystemElement
__RELPATH        : Win32_Share.Name="D$"
__PROPERTY_COUNT : 10
__DERIVATION     : {CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER         : OPS01-WINTEST01
__NAMESPACE      : root\cimv2
__PATH           : \\OPS01-WINTEST01\root\cimv2:Win32_Share.Name="D$"
AccessMask       :
AllowMaximum     : True
Caption          : Default share
Description      : Default share
InstallDate      :
MaximumAllowed   :
Path             : D:\
Scope            : System.Management.ManagementScope
Options          : System.Management.ObjectGetOptions
ClassPath        : \\OPS01-WINTEST01\root\cimv2:Win32_Share
Properties       : {AccessMask, AllowMaximum, Caption, Description...}
SystemProperties : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY...}
Qualifiers       : {dynamic, Locale, provider, UUID}
Site             :
Container        :
PSComputerName   : OPS01-WINTEST01
Status           : OK
Type             : 2147483651
Name             : IPC$
__GENUS          : 2
__CLASS          : Win32_Share
__SUPERCLASS     : CIM_LogicalElement
__DYNASTY        : CIM_ManagedSystemElement
__RELPATH        : Win32_Share.Name="IPC$"
__PROPERTY_COUNT : 10
__DERIVATION     : {CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER         : OPS01-WINTEST01
__NAMESPACE      : root\cimv2
__PATH           : \\OPS01-WINTEST01\root\cimv2:Win32_Share.Name="IPC$"
AccessMask       :
AllowMaximum     : True
Caption          : Remote IPC
Description      : Remote IPC
InstallDate      :
MaximumAllowed   :
Path             :
Scope            : System.Management.ManagementScope
Options          : System.Management.ObjectGetOptions
ClassPath        : \\OPS01-WINTEST01\root\cimv2:Win32_Share
Properties       : {AccessMask, AllowMaximum, Caption, Description...}
SystemProperties : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY...}
Qualifiers       : {dynamic, Locale, provider, UUID}
Site             :
Container        :


                                                                     

手动创建的共享type为0,系统默认的共享,type值不为0,所以可以用以下方法过滤出手动创建的共享目录

Get-WmiObject win32_share | ?{$_.type -eq 0}


wKiom1gtW1SwIVRVAABToy34WL8455.png-wh_50



使用WQL语句

使用WQL语句可以用于筛选WMI对象

语法:

Get-WmiObject -Query "select [对象] from WMI对象  WHERE 条件“

上面的命令可以分解成两条:

  • get-wmiobject -query "WQL语句" 

  • WQL= ”select * from Wmi对象 where 条件“


练习:

  • 列出本机的WmiObject对象

  • 只获取win32_开头的对象

  • 获取所有的Win32_Share对象,并用列举的方式表示

  • 查找状态为running的win32_service对象

  • 查找startMode为Auto的win32_service对象

  • 查看所有的本地磁盘

  • 查找每个磁盘的剩余空间


例如: 查看所有由用户创建的共享目录

Get-WmiObject -query "select * from win32_share where type=0"

wKioL1gtagiSuCfLAADBuYyhIpY658.png-wh_50



练习1:获取win32_开头的对象

Get-WmiObject -list win32_*


练习2:查找状态为running的win32_service对象


Get-WmiObject -query "select * from win32_service where state='running'"

wKiom1gtbIXw0xFQAACsPGzvi6c282.png-wh_50


以列表形式显示:

wKiom1gtbO-jxI-hAAI_yCtxdXQ190.png-wh_50




很多WMI对象可以使用cmdlet获取,例如:

  • Get-WmiObject win32_service  == Get-Service

  • Get-WmiObject win32_Process  == Get-Process