开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

wKiom1gsZFuh0RCaAASyLGJQ73g308.png


获取磁盘信息

1
Get-WmiObject win32_logicaldisk

wKiom1gtUibiuhLPAAFQmOSsecA555.png-wh_50


获取指定磁盘信息

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

wKioL1gtVJrzySteAABqiD-0WQg982.png-wh_50



获取C盘剩余空间

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

wKioL1gtVR3hILHmAAA8nZLg3lM592.png-wh_50



获取CPU信息

1
Get-WmiObject win32_processor

wKiom1gtVdXiwNyLAAB7wqfuCO8882.png-wh_50

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


查看计算机制造商信息


1
Get-WmiObject win32_computersystem

wKioL1gtVmmC8HKSAAD_JTGVpdQ358.png-wh_50



获取内存总大小

1
Get-WmiObject win32_computersystem).TotalPhysicalmemory

wKioL1gtVveCWDJsAACBObFto5Y810.png-wh_50



查看系统共享目录

1
Get-WmiObject win32_share

wKiom1gtV6HS9NNdAADVJuRMbKc827.png-wh_50  



查看共享相信信息

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}


wKiom1gtW1SwIVRVAABToy34WL8455.png-wh_50



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

wKioL1gtagiSuCfLAADBuYyhIpY658.png-wh_50



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

1
Get-WmiObject -list win32_*


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


1
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










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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
python+socket服务端和客户端
python+socket服务端和客户端
14 0
[计算机系统]之虚拟内存-第一部分(基本原理续)
[计算机系统]之虚拟内存-第一部分(基本原理续)
90 0
纸上得来终觉浅,玄铁RISC-V开源芯片计算机体系下的教与学
随着中国信息技术飞速的发展,云计算、AI、5G等创新技术被更多地运用到教育手段变革、教育资源共享之中。阿里云提出的“飞天加速计划”也在后疫情时代,通过云力量帮助中国高校培养新一批创新人才。
4876 0
【Flutter】Dart 面向对象 ( 抽象类 | 抽象方法 )
【Flutter】Dart 面向对象 ( 抽象类 | 抽象方法 )
112 0
《设计原本—计算机科学巨匠Frederick P. Brooks的反思》一一1.4 对设计过程的思考
本节书摘来自华章出版社《设计原本—计算机科学巨匠Frederick P. Brooks的反思》一 书中的第1章,第1. 4节,作者:(美) Frederick P. Brooks, Jr. 著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1105 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载