使用WMI对象收集计算机信息

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

使用WMI对象收集计算机信息


获取磁盘信息

1
Get-WmiObject win32_logicaldisk

使用WMI对象收集计算机信息


获取指定磁盘信息

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

使用WMI对象收集计算机信息



获取C盘剩余空间

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

使用WMI对象收集计算机信息



获取CPU信息

1
Get-WmiObject win32_processor

使用WMI对象收集计算机信息

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


查看计算机制造商信息


1
Get-WmiObject win32_computersystem

使用WMI对象收集计算机信息



获取内存总大小

1
Get-WmiObject win32_computersystem).TotalPhysicalmemory

使用WMI对象收集计算机信息



查看系统共享目录

1
Get-WmiObject win32_share

使用WMI对象收集计算机信息  



查看共享相信信息

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}


使用WMI对象收集计算机信息



使用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"

使用WMI对象收集计算机信息



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

1
Get-WmiObject -list win32_*


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


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

使用WMI对象收集计算机信息


以列表形式显示:

使用WMI对象收集计算机信息




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

  • Get-WmiObject win32_service  == Get-Service

  • Get-WmiObject win32_Process  == Get-Process










本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1873738,如需转载请自行联系原作者

上一篇:Windows 7 公共文件夹对话框


下一篇:人们将面临大数据无法进行预测分析的挑战