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
获取磁盘信息
Get-WmiObject win32_logicaldisk
获取指定磁盘信息
Get-WmiObject win32_logicaldisk | ?{$_.DeviceID -like "C:"}
获取C盘剩余空间
(Get-WmiObject win32_logicaldisk | ?{$_.DeviceID -like "C:"}).freespace
获取CPU信息
Get-WmiObject win32_processor
注意:上面是我在虚拟机中执行命令的结果,物理机中信息要比这多很多
查看计算机制造商信息
Get-WmiObject win32_computersystem
获取内存总大小
(Get-WmiObject win32_computersystem).TotalPhysicalmemory
查看系统共享目录
Get-WmiObject win32_share
查看共享相信信息
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}
使用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"
练习1:获取win32_开头的对象
Get-WmiObject -list win32_*
练习2:查找状态为running的win32_service对象
Get-WmiObject -query "select * from win32_service where state='running'"
以列表形式显示:
很多WMI对象可以使用cmdlet获取,例如:
Get-WmiObject win32_service == Get-Service
Get-WmiObject win32_Process == Get-Process
转载于:https://blog.51cto.com/zengestudy/1873738