我记得在xp时代,常常使用的工具备一个叫作WMI Administrative Tools,是微软官方提供的用来查看、编辑WMI对象的,只是如今好似不支持新的系统了。可是,在Win七、Server 2008下,这些功能均可以方便的经过PowerShell来完成。ios
首先,先来认识一下什么是WMI对象:sql
WMI是做为一个基本的数据库存在于Windows系统中的。咱们能够链接到WMI服务请求查询其中所包含的信息。WMI包括了系统方方面面的信息,包括:数据库
• 机器信息:制造商、型号、序列号等服务器
• BIOS信息网络
• OS信息数据结构
• CPU信息:种类、制造商、速度、版本ide
• 服务器内存总量工具
• 磁盘信息:容量、格式等this
• 网络信息:MAC、IP等spa
• 其余
能够看出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
- }
配合更多的查询命令,即可以方便的写出一个查询计算机信息的脚本,在本教程的结束部分,我会尽量多的提供各类经常使用脚本。本节内容就先写到这里。