探索PowerShell 【十三】WMI对象
我记得在xp时代,经常使用的工具有一个叫做WMI Administrative Tools,是微软官方提供的用来查看、编辑WMI对象的,只是现在好似不支持新的系统了。但是,在Win7、Server 2008下,这些功能都可以方便的通过PowerShell来完成。
首先,先来认识一下什么是WMI对象:
WMI是作为一个基本的数据库存在于Windows系统中的。我们可以连接到WMI服务请求查询其中所包含的信息。WMI包括了系统方方面面的信息,包括:
• 机器信息:制造商、型号、序列号等
• BIOS信息
• OS信息
• CPU信息:种类、制造商、速度、版本
• 服务器内存总量
• 磁盘信息:容量、格式等
• 网络信息:MAC、IP等
• 其他
可以看出WMI内容是多么的丰富,几乎包括了计算机的方方面面。
利用PowerShell查看WMI成员
在PowerShell中通过以下命令列出WMI对象:
get-wmiObject -list -namespace “root\CIMV2″ <enter>

需要具体查看某个类的成员,使用下面的命令(例如类"win32_process"):
get-wmiobject -class win32_process -namespace "root\cimv2" | get-member

可以看到每个有的成员是属性(Property),而有的则是方法(Method)。
那么,有两个问题:
为什么要使用-namespace "root\cimv2"?
cimv2是WMI的一个命名空间,每个命名空间下有不同的WMI对象成员。cimv2是其默认设置。可以按照以下步骤进行修改:
控制面板 -> 管理工具 -> 计算机管理 -> 服务和应用程序 -> 右键"WMI控制" -> 属性 -> 高级
参数"-namespace"并非必须,但是,使用它有两个好处,一是保证我们能准确的查看指定命名空间下的WMI对象,因为有时默认命名空间并非我们所希望查看的;二是如果不指定命名空间,被设置过的计算机可能拒绝我们的访问请求。
注:因为我使用英文版系统,上述步骤中个别名称可能不准确。

在如上图所示的界面,即可修改默认路径。
另一个问题是,查看成员的类型有什么用?
如果一个成员是方法,那么,我们可以调用它。如果一个成员是属性,我们则可以查看它的值。但是,需要注意的是,不同的属性成员有不同的数据结构,有的是"System.String",有的是"System.UInt32",有的则是"System.String[ ]",在使用时,应当注意数据格式,否则会报错的。
如果我们需要管理网络中的计算机,则需要指定计算机名称:
get-wmiObject -list -namespace “root\CIMV2″ -computername 计算机名 <enter>
好了,现在来具体操作,查看具体信息。
例:
查看BIOS信息
get-wmiobject -class win32_bios -namespace "root\cimv2" <enter>
运行结果:

查看服务信息
get-wmiobject -class win32_service -namespace "root\cimv2" | format-list * <enter>
查看机器信息
get-wmiobject -class win32_computersystem | format-list * <enter>
在网络管理环境中的多数情况下,我们可能要查看不同的计算机信息,因此,就需要使用计算机这一参数,例如:
查询本地计算机的网络信息
- $name="."
- $items = get-wmiObject -class win32_NetworkAdapterConfiguration '
- -namespace "root\CIMV2" -ComputerName $name | where{$_.IPEnabled -eq “True”}
- foreach($obj in $items) {
- Write-Host "DHCP Enabled:" $obj.DHCPEnabled
- Write-Host "IP Address:" $obj.IPAddress
- Write-Host "Subnet Mask:" $obj.IPSubnet
- Write-Host "Gateway:" $obj.DefaultIPGateway
- Write-Host "MAC Address:" $ojb.MACAddress
- }
如果查询对象是其他机器,只需给变量"$name"赋与其他值即可。
例如:
- $name=read-host "Enter Computer Name"
- write-host "Computer:"$name
- $items = get-wmiObject -class win32_NetworkAdapterConfiguration '
- -namespace "root\CIMV2" -ComputerName $name | where{$_.IPEnabled -eq “True”}
- foreach($obj in $items) {
- Write-Host "DHCP Enabled:" $obj.DHCPEnabled
- Write-Host "IP Address:" $obj.IPAddress
- Write-Host "Subnet Mask:" $obj.IPSubnet
- Write-Host "Gateway:" $obj.DefaultIPGateway
- Write-Host "MAC Address:" $ojb.MACAddress
- }
配合更多的查询命令,便可以方便的写出一个查询计算机信息的脚本,在本教程的结束部分,我会尽可能多的提供各种常用脚本。本节内容就先写到这里。
探索PowerShell 【十三】WMI对象的更多相关文章
- PowerShell_零基础自学课程_8_高级主题:WMI对象和COM组件
本系列文章从最初的初识开始,基本上可以完成一些简单的系统管理了,为了更方便的管理系统,同时为了更好的发掘系统的性能,就需要用到系统提供 的一些高级特性,在Windows Server系列的OS中,如果 ...
- C# 利用WMI对象获取物理内存和可用内存大小
下面的代码演示的是使用WMI对象可获取取物理内存和可用内存大小,在使用WMI对象前,先要添加对System.Management的引用,然后就可以调用WMI对象,代码如下: //获取总物理内存大小 M ...
- PowerShell 使用 WMI 获取信息
在 PowerShell 可以很容易使用 WMI 拿到系统的信息,如果有关注我的网站,就会发现我写了很多通过 WMI 拿到系统的显卡,系统安装的软件等方法,本文告诉大家如果通过 PowerShell ...
- PowerShell 管道和对象成员
2.1 管道 在各种现代的shell中,均支持管道的概念. 管道的最大特点就是: 前一个命令的输出作为后一个命令的输入.cmd.bash均支持管道的概念,这里我就不多说了,下面我们说说PS中 管道 ...
- 深度探索C++对象模型——关于对象
引言 以前读<C++ Primer>的时候一直有一种感觉:该书虽然是C++入门书籍,初学者读之却觉晦涩,越往后读越是如此.等到稍加理解后再读该书,顿感醍醐灌顶,茅塞顿开.究其原因,在于原作 ...
- PowerShell 通过 WMI 获取系统安装的驱动
本文告诉大家如何通过 WMI 获取用户已经安装的驱动程序 通过下面代码可以获取用户已经安装的驱动程序 Get-WmiObject Win32_SystemDriver | Format-List Ca ...
- 《精通C#》第十三章 对象的生命周期
在C#中,程序员无法直接在C#中删除一个托管对象,因为C#不提供这个功能,那么类的实例就需要通过CLR调用垃圾回收机制进行清除,回收内存..NET垃圾回收器会压缩空的内存块来实现优化,为了辅助这一功能 ...
- Powershell获取WMI设备清单
支持所有PS版本. WMI服务能够报告详细的硬件信息.通常,每个硬件都来自它们自己的WMI代理类.但是要找出这些硬件类的名字是不容易. 所有硬件类都在同一个WMI根下面,你可以在根类查询所有的硬件: ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十三 || DTOs 对象映射使用,项目部署Windows+Linux完整版
更新 很多小伙伴在用 IIS 发布的时候,总是会有一些问题,文章下边 #autoid-6-0-0 我也简单的动图展示了,如何 publish 到 IIS 的过程,如果你能看懂,却发现自己的项目有问题的 ...
随机推荐
- Elasticsearch倒排索引结构
一切设计都是为了提高搜索的性能 倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引.通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key. 先来回 ...
- #6 判断一个数是否为2的n次方
「ALBB面试题」 [题目] 如何判断一个数是否为2的n次方 [题目分析] 看到这种题,相信大家第一反应就是循环除2,这样做肯定是可以得出结果的:但是这种做法无疑大大增加了计算机的运行时间,一个非常大 ...
- 盘点 Python 中的那些冷知识(一)
小明在日常Code中遇到一些好玩,冷门的事情,通常都会记录下来. 现在已经积攒了一些了,最近打算整理一波,发出来给大家补补.一篇只分享五个,有时间了就整理.不想错过的,千万记得关注一下. 1. 省略号 ...
- Cayley图数据库的简介及使用
图数据库 在如今数据库群雄逐鹿的时代中,非关系型数据库(NoSQL)已经占据了半壁江山,而图数据库(Graph Database)更是攻城略地,成为其中的佼佼者. 所谓图数据库,它应用图理论( ...
- ## 本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘
本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘一,磁盘管理1.显示当前目录位置 pwd2.切换目录 cd ...
- java_IO流
IO流概述及分类 Reader InputStream OutputStream Writer都是Object的直接子类 字节流: 字节输入流 InputStream(抽象类) |---File ...
- 【Tomcat】Tomcat工作原理及简单模拟实现
Tomcat应该都不陌生,我们经常会把写好的代码打包放在Tomcat里并启动,然后在浏览器里就能愉快的调用我们写的代码来实现相应的功能了,那么Tomcat是如何工作的? 一.Tomcat工作原理 我们 ...
- android studio gradle 更新方法。
Android studio更新 第一步:在你所在项目文件夹下:你项目根目录gradlewrapper gradle-wrapper.properties (只要在打开项目的时候选OK,这个文件就 ...
- 一起学Android之Intent
本文简述在Android开发中Intent的常见应用,仅供学习分享使用. 什么是Intent? Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Inten ...
- 心路历程:当win10遇上win7激活程序...请默哀
经历一次莫名其妙的懵逼系统崩溃后,我对破解软件/激活软件终于有了阴影,想想就想哭,不过怨不了别人,锅不能随便甩,怪自己粗心大意,怪自己太懒呜呜呜... 所以有心将这次心路历程记录下来,谨防自己下次再犯 ...