65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 WMI 检索硬件信息

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (36投票s)

2004 年 3 月 8 日

2分钟阅读

viewsIcon

444491

downloadIcon

14093

一篇关于使用 WMI 检索硬件信息的文章。

引言

Windows 管理规范 (WMI) 是一个可扩展的系统管理基础设施,它使用一个单一的、一致的、基于标准的、可扩展的、面向对象的接口。WMI 为您提供了一种与系统管理信息和底层 WMI API 交互的标准方式。WMI 主要由系统管理应用程序开发人员和管理员用于访问和操作系统管理信息。

WMI 的目的是提供一种标准化手段来管理您的计算机系统,无论是本地计算机还是企业中的所有计算机。用最简单的术语来说,管理无非是收集有关计算机系统上受管理对象的状态的数据,并通过更改存储的关于该对象的数据来更改受管理对象的状态。受管理对象可以是硬件实体,例如内存阵列、端口或磁盘驱动器。它也可以是软件实体,例如服务、用户帐户或页面文件。

WMI 可以管理计算机系统的许多组件。在管理硬盘时,您可以使用 WMI 监视磁盘上剩余的可用空间量。您还可以使用 WMI 通过删除文件、更改文件安全性或对驱动器进行分区或格式化来远程更改驱动器的状态。

WMI 不仅是一个收集系统信息的强大工具,而且非常易于使用。现有的脚本 WMI 接口使其可以被系统管理员和网页设计师以及熟练的程序员使用。

所呈现的应用程序在 HTML 页面中显示硬件信息,并使用 VBScript 作为后端编程语言。

首先,我们将 strComputer(获取信息的计算机名称)设置为“.” - 当前计算机,并编写函数 GetWMIServices() - 该函数将在所有从 WMI 获取信息的过程中使用,并且可以修改为从另一台计算机获取 WMI 服务。

然后我们定义了一些将格式化输出的函数 - WMIDateStringToDate(), DisplayOutputHeader(), DisplayOutput(), GetTableHeader(), GetTableFooter(), GetRow()。使用这些函数,我们将获得标准化的输出。

代码

例如,检索和显示处理器信息的代码是

Function  ShowProcessorInfo()
  On  Error  Resume  Next
  DisplayOutputHeader("Processor  -  Win32_Processor")
  str  =  ""
  Set  objWMIService  =  GetWMIServices()
  Set  colItems  =  objWMIService.ExecQuery( _
    "Select  *  from  Win32_Processor")
  For  Each  objItem  in  colItems
          str  =  str  &  GetTableHeader()
          str  =  str  &  GetRow("Address  Width",  objItem.AddressWidth)
          str  =  str  &  GetRow("Architecture",  objItem.Architecture)
          str  =  str  &  GetRow("Availability",  objItem.Availability)
          str  =  str  &  GetRow("CPU  Status",  objItem.CpuStatus)
          str  =  str  &  GetRow("Current  Clock  Speed",  _
             objItem.CurrentClockSpeed)
          str  =  str  &  GetRow("Data  Width",  objItem.DataWidth)
          str  =  str  &  GetRow("Description",  objItem.Description)
          str  =  str  &  GetRow("Device  ID",  objItem.DeviceID)
          str  =  str  &  GetRow("Ext  Clock",  objItem.ExtClock)
          str  =  str  &  GetRow("Family",  objItem.Family)
          str  =  str  &  GetRow("L2  Cache  Size",  objItem.L2CacheSize)
          str  =  str  &  GetRow("L2  Cache  Speed",  objItem.L2CacheSpeed)
          str  =  str  &  GetRow("Level",  objItem.Level)
          str  =  str  &  GetRow("Load  Percentage",  objItem.LoadPercentage)
          str  =  str  &  GetRow("Manufacturer",  objItem.Manufacturer)
          str  =  str  &  GetRow("Maximum  Clock  Speed",  _
            objItem.MaxClockSpeed)
          str  =  str  &  GetRow("Name",  objItem.Name)
          str  =  str  &  GetRow("PNP  Device  ID",  objItem.PNPDeviceID)
          str  =  str  &  GetRow("Processor  Id",  objItem.ProcessorId)
          str  =  str  &  GetRow("Processor  Type",  objItem.ProcessorType)
          str  =  str  &  GetRow("Revision",  objItem.Revision)
          str  =  str  &  GetRow("Role",  objItem.Role)
          str  =  str  &  GetRow("Socket  Designation",  _
              objItem.SocketDesignation)
          str  =  str  &  GetRow("Status  Information",  objItem.StatusInfo)
          str  =  str  &  GetRow("Stepping",  objItem.Stepping)
          str  =  str  &  GetRow("Unique  Id",  objItem.UniqueId)
          str  =  str  &  GetRow("Upgrade  Method",  objItem.UpgradeMethod)
          str  =  str  &  GetRow("Version",  objItem.Version)
          str  =  str  &  GetRow("Voltage  Caps",  objItem.VoltageCaps)
          str  =  str  &  GetTableFooter()
  Next
  DisplayOutput(str)
End  Function

HardwareInfo 还会检索有关主板、电池、BIOS、内存设置、PnP 设备、端口和其他信息。

最后,使用级联样式表自定义应用程序的外观 - 创建美观界面的最简单方法。应用程序可以按原样运行 - 只需双击index.hta 文件,或者它可以被编译成单个文件。使用 Windows 管理规范检索有关已安装硬件项的信息非常容易,并且只需要最少的编程技能。

HardwareInformation 应用程序被编写为 HTA (HTML 应用程序),并使用 www-Sharp.ClrHost 提供的编译器进行编译,该编译器可免费使用。 www-Sharp 包括 WMI 查看器,可用于直观地探索 WMI 类和属性并编写强大的 WMI 应用程序。

© . All rights reserved.