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 信息
1
|
Get-WmiObject --list
|
获取磁盘信息
1
|
Get-WmiObject win32_logicaldisk |
获取指定磁盘信息
1
|
Get-WmiObject win32_logicaldisk | ?{ $_ .DeviceID -like "C:" }
|
获取C盘剩余空间
1
|
( Get-WmiObject win32_logicaldisk | ?{ $_ .DeviceID -like "C:" }).freespace
|
获取CPU信息
1
|
Get-WmiObject win32_processor
|
注意:上面是我在虚拟机中执行命令的结果,物理机中信息要比这多很多
查看计算机制造商信息
1
|
Get-WmiObject win32_computersystem
|
获取内存总大小
1
|
( Get-WmiObject win32_computersystem).TotalPhysicalmemory
|
查看系统共享目录
1
|
Get-WmiObject win32_share |
查看共享相信信息
1
|
Get-WmiObject win32_share | Format-list *
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
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,所以可以用以下方法过滤出手动创建的共享目录
1
|
Get-WmiObject win32_share | ?{$_. type - eq 0}
|
使用WQL语句
使用WQL语句可以用于筛选WMI对象
语法:
1
|
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对象
-
查看所有的本地磁盘
-
查找每个磁盘的剩余空间
例如: 查看所有由用户创建的共享目录
1
|
Get-WmiObject -query "select * from win32_share where type=0"
|
练习1:获取win32_开头的对象
1
|
Get-WmiObject -list win32_* |
练习2:查找状态为running的win32_service对象
1
|
Get-WmiObject -query "select * from win32_service where state='running'"
|
以列表形式显示:
很多WMI对象可以使用cmdlet获取,例如:
-
Get-WmiObject win32_service == Get-Service
-
Get-WmiObject win32_Process == Get-Process