探索PowerShell(十三) WMI对象介绍
首先,先来认识一下什么是wmi对象:
wmi是作为一个基本的数据库存在于windows系统中的。我们可以连接到wmi服务请求查询其中所包含的信息。wmi包括了系统方方面面的信息,包括:
• 机器信息:制造商、型号、序列号等
• bios信息
• os信息
• cpu信息:种类、制造商、速度、版本
• 服务器内存总量
• 磁盘信息:容量、格式等
• 网络信息:mac、ip等
• 其他
可以看出wmi内容是多么的丰富,几乎包括了计算机的方方面面。
利用powershell查看wmi成员
在powershell中通过以下命令列出wmi对象:
get-wmiobject -list -namespace “root\cimv2″ <enter>
需要具体查看某个类的成员,使用下面的命令(例如类"win32_process"):
可以看到每个有的成员是属性(property),而有的则是方法(method)。get-wmiobject -class win32_process -namespace "root\cimv2" | get-member
那么,有两个问题:
为什么要使用-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
}
配合更多的查询命令,便可以方便的写出一个查询计算机信息的脚本,在本教程的结束部分,我会尽可能多的提供各种常用脚本。本节内容就先写到这里。