探索PowerShell(十三) WMI对象介绍

所属分类: 脚本专栏 / PowerShell 阅读数: 1146
收藏 0 赞 0 分享
我记得在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隐藏不显示窗口的多种方法

这篇文章主要介绍了PowerShell隐藏不显示窗口的多种方法,本文讲解了启动PowerShell时隐藏自己的窗口、在PowerShell启动其它进程时隐藏窗口、使用PowerShell隐藏其它进程的窗口三种方法,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell启用winrm失败:拒绝访问 0x80070005 -2147024891

这篇文章主要介绍了PowerShell启用winrm失败:拒绝访问 0x80070005 -2147024891,本文给出了详细的排查步骤和解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Powershell目录文件夹管理权限的继承和指定方法

这篇文章主要介绍了Powershell目录文件夹管理权限的继承和指定方法,本文给出了创建文件夹、获取当前权限、添加新的权限、添加管理员权限等,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell查看本机文件关联程序和默认打开程序的方法

这篇文章主要介绍了PowerShell查看本机文件关联程序和默认打开程序的方法,本文给出了查看方法,同时给出了一份读取结果,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell脚本反引号用法实例:随时随地给代码换行

这篇文章主要介绍了PowerShell脚本反引号用法实例:随时随地给代码换行,在遇到一些超长代码行时非常有用,一般编程代码一行的字符数不超过80个哦,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell 数组的多种录入方法

这篇文章主要介绍了PowerShell 数组的多种录入方法,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell String对象方法小结

这篇文章主要介绍了PowerShell String对象方法,需要的朋友可以参考下
收藏 0 赞 0 分享

使用PowerShell获取当前主机内存使用量和总量的方法

这篇文章主要介绍了使用PowerShell获取当前主机内存使用量和总量的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell批量修改AD用户密码属性的代码

这篇文章主要介绍了PowerShell批量修改AD用户密码属性的代码,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell 自动备份oracle并上传到ftp

我这里有这样一个需求:有一个数据库,每天使用SQL Server Agent自动生成备份文件。然后,这个数据库非常重要,需要把每天的备份上传一个远程的FTP服务器上去。下面我们来看看如何使用Powershell来实现吧
收藏 0 赞 0 分享
查看更多