探索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 
}

配合更多的查询命令,便可以方便的写出一个查询计算机信息的脚本,在本教程的结束部分,我会尽可能多的提供各种常用脚本。本节内容就先写到这里。

(0)

相关推荐

  • 探索PowerShell(十四) 使用WMI对象的方法

    上一篇文章中介绍了WMI的基础内容,主要讲了WMI的属性值的查看,文中还提到,WMI不仅具有属性,还具有方法.这一节就来具体讲一下如何调用WMI对象方法. 通过查看WMI对象,可以发现有不少的类同时具有属性和方法.例如类"Win32_NetworkAdapterConfiguration",j就具有不少的方法和属性,可以使用以下命令查询: Get-WmiObject Win32_NetworkAdapterConfiguration | Get-Member -MemberType M

  • Powershell小技巧之使用WMI测试服务响应

    测试一个服务是否有响应,有一个好办法.首先,使用WMI查询你指定的服务,WMI中可以返回构成它进程的ID. function Test-ServiceResponding($ServiceName) { $service = Get-WmiObject -Class Win32_Service -Filter "Name='$ServiceName'" $processID = $service.processID $process = Get-Process -Id $process

  • Powershell小技巧之使用WMI工具

    WMI是一个强大的技术:只需要简单的指定一个WMI类名就能返回它类的所有实例: 复制代码 代码如下: PS> Get-WmiObject -Class Win32_BIOS SMBIOSBIOSVersion : 76CN27WW Manufacturer      : LENOVO Name              : 76CN27WW SerialNumber      : 1006250300406 Version           : LENOVO - 1 你如何知道它有哪些类呢?这

  • PowerShell入门教程之访问.Net程序集、COM和WMI实例

    PowerShell可以设计的大而全,重新实现一切:也可以像现在一样设计成胶水语言,利用现有的资源.特别是,与.Net.COM和WMI三大豪门的联姻,使得PowerShell必将在Windows世界里大放光彩. 与新锐.Net联姻 在Windows的世界里,.Net代表着现在和将来,是新生力量.与.Net联姻,就意味着榜上了粗腿,迈上了快车道.号称基于.Net Framework,那么使用.Net的基类就易如反掌.基本步骤如下:1.添加类所在程序集:2.创建类的实例:3.调用实例的函数或者属性.

  • Powershell小技巧之使用WMI查询插上的U盘

    如果你想知道当前插在你电脑上的USB设备,WMI能帮助你: Get-WmiObject -Class Win32_PnPEntity | Where-Object { $_.DeviceID -like 'USBSTOR*' } 这将返回所有插上在使用的USBSTOR设备类 如果你使用WMI查询语言(WQL),你甚至可以使用筛选命令: Get-WmiObject -Query 'Select * From Win32_PnPEntity where DeviceID Like "USBSTOR%

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

    我记得在xp时代,经常使用的工具有一个叫做WMI Administrative Tools,是微软官方提供的用来查看.编辑WMI对象的,只是现在好似不支持新的系统了.但是,在Win7.Server 2008下,这些功能都可以方便的通过PowerShell来完成. 首先,先来认识一下什么是WMI对象: WMI是作为一个基本的数据库存在于Windows系统中的.我们可以连接到WMI服务请求查询其中所包含的信息.WMI包括了系统方方面面的信息,包括: • 机器信息:制造商.型号.序列号等 • BIOS

  • 探索PowerShell(十) 循环语句介绍

    PowerShell作为可编程性语言,拥有以下循环语句. 注:本节所要讨论的内容的实质更多的偏向于程序设计方面,所以在此不做过多详细讲解,只针对PowerShell中的应用进行具体讲解. • for (初值;表达式;赋值语句) {代码} 用变量值控制执行次数 • foreach (成员变量 in 数组) {代码} 利用迭代执行代码 • foreach-object 对一组输入的每个对象执行运算 • while(表达式) {代码} 表达式为真时循环执行代码 • do {代码} while(表达式)

  • 探索PowerShell (四) PowerShell的对象、格式与参数

    今天贴博文晚了,感谢各位能继续关注! 本节将要给大家介绍一下PowerShell下的对象,基本格式以及参数.依然属于PowerShell的基础. PowerShell中的对象 在本教程开篇我们说过,PowerShell是基于面向对象化的,不像传统的shell那样基于文本.这其中最主要的原因就是因为Win平台在管理操作上主要以面向对象为主,因此为了符合系统特点和我们的操作习惯,PowerShell也继承了这一特色.因此,不像传统的shell,在PowerShell中,我们可以随意地与对象进行互动,

  • PowerShell中Get-Date对象的常用属性和方法介绍

    本文介绍PowerShell中使用Get-Date得到的日期对象的属性和方法,利用好这些对象和方法,可以极大的增强我们开发的灵活性. 使用Get-Date可以获取到一个时间对象,这个时间对象,可不是仅仅用来输出当前时间这么简单.我们来看看它的属性和方法吧,不看白不看. 要想看一个对象的成员(即对象的属性和方法),可以使用管道符,再加上Get-Member这个cmdlet.很方便滴! 复制代码 代码如下: PS C:\Users\zhanghong> Get-Date | Get-Member T

  • 探索PowerShell(六) 脚本基础简要

    PowerShell脚本基础知识概览: 常量.变量.数组.哈希 条件.逻辑 循环控制 模块化 WMI对象(各种设备) ADSI对象(活动目录) 常量.变量.数组.哈希 各种字符串操作 使用常量和变量 各种运算符和表达式 创建.修改.合并数组或哈希表 条件.逻辑 判断各种条件 "if"."switch"语句 使用运算符进行判断 循环控制 "while"."do while"."do until"."

  • 探索PowerShell(一) 初识 PowerShell

    Windows PowerShell 是一个新的-- 好吧,我相信你在看本文之前已经把这句话看过N遍了-- PowerShell是一个由微软的提供的全新shell程序,使用了全新的命令提示和脚本环境.使用PowerShell会给系统管理员带来什么?学习PowerShell的好处又是什么?如果你已经有了管理并使用VBScript的经验,相信你已经知道答案了.Active Directory域现在已经变得更加庞大和复杂,对于那些被束缚在GUI和Microsoft管理控制台上的管理员们,PowerSh

  • PowerShell中文件对象的属性方法总结

    本文介绍一个PowerShell中文件对象有哪些属性,知道了这些属性对于我们更好的对文件进行操作是非常重要的. PowerShell是一个面向对象的脚本语言,在PowerShell中,所有的都是对象,文件也是对象.既然是对象,那肯定有属性.PowerShell中的文件对象,其实就是.NET中的System.IO.FileInfo类的实例.我们要查看完整的PowerShell文件对象的属性,其实不需要去翻MSDN,然后把System.IO.FileInfo类的属性找出来,那样太麻烦了,而且貌似在P

  • 详解JVM的内存对象介绍[创建和访问]

    作为java程序员对应Object应该是非常熟悉的,但是对于对象在JVM中的一些情况并不是很清楚,所以本文就来记录下对象在JVM中的一些内容 对象的创建 java程序中创建对象的常用方式是: Object obj = new Object(); 该行代码的执行过程如下: 从图中我们可以发现对象创建的步骤如下 执行new执行 检查这个指令参数是否能够在常量池中定位到一个类的符号引用,并且检查这个符号引用所代表的类是否已经被加载,解析和初始化. 如果该类没有被加载则先执行类的加载操作 如果该类已经被

  • JavaScript内置对象介绍

    目录 一.内置对象 二.Math对象 1.Math对象的使用 2.生成指定范围的随机数 三.日期对象 1.Date()方法的使用 2.日期对象的使用 3.获取时间戳 四.数组对象 1.数组对象的创建 2.检测是否为数组 3.添加删除数组元素的方法 4.数组排序 5. 数组索引方法 6.数组转换为字符串 五.字符串对象 1.根据字符返回位置 2. 根据位置返回字符 3. 字符串操作方法 4.split()方法 一.内置对象 内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,并提供了一

随机推荐