使用WMI得到计算机的信息

WMI是一项行业推荐规范,旨在为访问企业环境中的管理信息而开发一种标准化技术。该信息包括系统内存的状态、当前安装的客户应用程序清单,以及有关客户端状态的其他数据。
WMI是可伸缩的系统管理结构,该规范采用一个统一、基于标准且可扩展的面向对象接口。它提供与系统管理员信息和基础WMI API交互的标准方法,主要由系统管理应用程序开发人员和系统管理员用来访问和操作系统管理信息。
WMI可用来生成组织和管理系统信息的工具,使系统管理人员能够更密切的监视系统活动。
WMI提供了一套内置在Microsoft Windows操作系统中的丰富的系统管理服务,现在有大量的应用程序、服务和设备用其为信息技术操作和产品支持组织提供全方位的管理功能。基于WMI的管理系统的使用带来了更可靠的计算环境和更高的系统可靠性,从而节省了企业的开销。
WMI提供的大量的规范为许多高端应用程序,例如Microsoft Exchange、Microsoft SQL Server和Microsoft Internet信息服务(IIS)等实现如下管理任务。
1. 监视应用程序的运行情况
2. 检测瓶颈或故障
3. 管理和配置应用程序
4. 查询应用程序数据(使用对象关系的遍历和查询)
5. 执行无缝的本地或远程管理操作

下面我们通过一个例子来说明WMI的强大功能。以vb6为列:
引用”Microsoft WMI Scripting V1.1 Library”
代码如下:

Option Explicit
Dim WithEvents Sink As SWbemSink
Dim j As Integer
'功能:利用wmi组件得到计算机的信息,每一个小功能分开写,便于大家查阅

Private Sub cmdDone_Click()
Dim oWMINameSpace As SWbemServices
Dim oLogicalDiskSet As SWbemObjectSet
Dim oLogicalDisk As SWbemObject

Dim ObjSet As Variant
Dim sDrive As String
Dim sValue As String
Dim dblSize As Double
Dim Obj As Variant

Dim lIndex As Long

Set oWMINameSpace = GetObject("winmgmts:")

'得到驱动器的信息
On Error Resume Next
Set ObjSet = oWMINameSpace.InstancesOf("Win32_DiskDrive")

For Each Obj In ObjSet
 List5.AddItem Obj.Caption & " - " & BytesToMegabytes(Obj.Size) & " GB"
Next

'得到每一个驱动器的详细信息
On Error GoTo ErrorHandler
'Set oWMINameSpace = GetObject("winmgmts:")
Set oLogicalDiskSet = oWMINameSpace.InstancesOf("Win32_LogicalDisk")
For Each oLogicalDisk In oLogicalDiskSet
  On Error Resume Next

  sDrive = oLogicalDisk.deviceid

  ListView1.ListItems.Add , , sDrive
  lIndex = ListView1.ListItems.Count

  sValue = oLogicalDisk.Description & ""
  ListView1.ListItems(lIndex).SubItems(1) = sValue

  sValue = oLogicalDisk.FileSystem & ""
  ListView1.ListItems(lIndex).SubItems(2) = sValue

  sValue = oLogicalDisk.VolumeName & ""
  ListView1.ListItems(lIndex).SubItems(3) = sValue

  sValue = oLogicalDisk.VolumeSerialNumber & ""
  ListView1.ListItems(lIndex).SubItems(4) = sValue

  sValue = oLogicalDisk.Size & ""
  If IsNumeric(sValue) Then
dblSize = BytesToMegabytes(CDbl(sValue))
sValue = CStr(dblSize) & " MB"
  End If

  ListView1.ListItems(lIndex).SubItems(5) = sValue
Next

CleanUp:
Set oLogicalDisk = Nothing
Set oLogicalDiskSet = Nothing
Set oWMINameSpace = Nothing
Exit Sub

ErrorHandler:
MsgBox "" & Err.Description

GoTo CleanUp

End Sub

Private Sub Command1_Click()
Unload Me
End Sub

Private Function BytesToMegabytes(Bytes As Double) As Double
 Dim dblAns As Double
 dblAns = (Bytes / 1024) / 1024
 BytesToMegabytes = Format(dblAns, "###,###,##0.00")
End Function

Private Sub Command2_Click()
Dim oWMINameSpace As SWbemServices
Dim SystemSet As Variant
Dim System As Variant
Dim ObjSet As Variant
Dim Obj As Variant

Set oWMINameSpace = GetObject("winmgmts:")
'操作系统
Set SystemSet = oWMINameSpace.InstancesOf("Win32_OperatingSystem")

For Each System In SystemSet
  List1.AddItem System.Caption
  List1.AddItem System.Manufacturer
  List1.AddItem System.BuildType & “” ‘Win9x下好像取不出来
  List1.AddItem System.Version
  List1.AddItem System.SerialNumber
Next
'cpu
Set ObjSet = oWMINameSpace.InstancesOf("Win32_Processor")

For Each Obj In ObjSet
  List2.AddItem Obj.Caption
  List2.AddItem Obj.currentclockspeed & " Mhz"
Next

End Sub

Private Sub Command3_Click()
Dim oWMINameSpace As SWbemServices
Dim ObjSet As Variant
Dim Obj As Variant
Dim Adapter As Variant

'内存
Set oWMINameSpace = GetObject("winmgmts:")
Set ObjSet = oWMINameSpace.InstancesOf("Win32_PhysicalMemory")
Dim i As String

For Each Obj In ObjSet
  List3.AddItem BytesToMegabytes(Obj.capacity) & " MB" & " Chip"
Next

'网卡
Set Sink = New SWbemSink

Set Adapter = GetObject("winmgmts:")
Adapter.InstancesOfAsync Sink, "Win32_NetworkAdapter"

End Sub

Private Sub Form_Load()
j = 0
End Sub

Private Sub Sink_OnObjectReady(ByVal objWbemObject As WbemScripting.ISWbemObject, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)

Dim Adapter As Variant
‘得到所有的适配器信息
Set Adapter = GetObject("winmgmts:Win32_NetworkAdapterConfiguration=" & j & "")

List4.AddItem Adapter.Description

If IsNull(Adapter.MACAddress) Then
  List4.AddItem "No MAC Address"
  List4.AddItem ""
Else
  List4.AddItem "Mac: " & Adapter.MACAddress
  List4.AddItem ""
End If

j = j + 1
End Sub

这篇文章就介绍到这,更多的内容大家可以参考这篇文章:http://technet.microsoft.com/en-us/library/ee198932.aspx

(0)

相关推荐

  • VBS调用WMI快速关闭IE的脚本

    VBS调用WMI秒杀IE把以下文件存为KillIE.vbs,当要关闭所有用IE打开的网页时,双击执行便可, Set wmi=GetObject("winmgmts:\\.") Set pro_s=wmi.instancesof("win32_process") For Each p In pro_s  if p.name="iexplore.exe" then p.terminate() Next 这所以要提取是因为:本人一般打开的网页都很多,关

  • Rcmd.vbs [Remote Cmd with wmi]远程脚本

    复制代码 代码如下: On Error Resume Next Set outstreem=Wscript.stdout If (LCase(Right(Wscript.fullname,11))="Wscript.exe") Then Set objShell=Wscript.CreateObject("Wscript.shell") objShell.Run("cmd.exe /k cscript //nologo "&Chr(34)

  • vbs通过WMI修改文件文件夹的NTFS权限

    使用WMI修改文件文件夹的NTFS权限, 代码: 复制代码 代码如下: strUser = "guests"strPath = "D:\\abc.txt"RetVal = AddPermission(strUser,strPath,"R",True) '------------------------------------------------------------------------- '用于给文件和文件夹添加一条权限设置.返回值:

  • 将WMI中的DateTime类型转换成VBS时间的函数代码

    有两种方法可以转换,一种是自己写个函数解析: 复制代码 代码如下: Function WMIDateStringToDate(DateTime) WMIDateStringToDate = _ CDate(Mid(DateTime, 5, 2) &_ "/" &_ Mid(DateTime, 7, 2) &_ "/" &_ Left(DateTime, 4) &_ " " &_ Mid (DateT

  • vbs wmi获取电脑硬件信息实例

    Set wmi=GetObject("winmgmts:\\") Set board=wmi.instancesof("win32_baseboard") For Each b In board msg="主板:"&b.Manufacturer&vbTab&b.product&vbTab&Chr(13) Next msg=msg&Chr(13)&"---"+Chr(13)

  • VBS调用WMI遍历搜索硬盘文件并计数的方法

    多年之前写的一个VBS调用WMI来遍历搜索硬盘文件,并计数的函数,今天整理网盘,看到了,发上来 核心代码: Function wmisfile(path_sf,justcnt) 'On Error Resume Next StrComputer = "." Set ObjWMIService = GetObject("winmgmts:\\" & StrComputer & "\root\cimv2") Set FileList

  • WMI StdRegProv 通过wmi操作注册表的vbscript实现代码 (本地或远程)

    Because of its length, only the code for the function itself is shown on this page. The demo script that shows how to use this function is available as a separate download. 复制代码 代码如下: Function ReadRegValue( myComputer, myRegPath, myRegValue ) ' This

  • VBS通过WMI监视注册表变动的代码

    Google一下"VBS监视注册表",TOP 5都是一模一样的代码,我查了一下,出处是Hey, Scripting Guy! Blog上一篇名为<How Can I Monitor Changes to a Registry Key?>的文章,真是厚颜无耻. 文章我没时间翻译了,贴一下代码: 复制代码 代码如下: strComputer = "." Set objWMIService = GetObject("winmgmts:\\"

  • 初窥WMI_Vbs脚本编程简明教程补充读物第1/2页

    今天,我沼泽将给大家介绍个朋友,它就是Microsoft Windows Management Instrumentation (WMI).中文名字叫Windows管理规范.从Windows 2000开始,WMI(Windows 管理规范)就内置于操作系统中,并且成为了Windows系统管理的重要组成部分.所以大家很容易就能见到它的,因为我们至少也应该是个Windows 2000的使用者了.下面我将详细介绍它的每个细节,让你从不认识它到喜欢上它.  WMI能做什么? WMI不仅可以获取想要的计算

  • VBS脚本使用WMI操作注册表的代码第1/2页

    oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath oReg.SetExpandedStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue    oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue    oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPat

  • VB中使用WMI获取系统硬件和软件有关信息

    WMI是英文Windows Management Instrumentation的简写,它的功能主要是:访问本地主机的一些信息和服务,可以管理远程计算机(当然你必须要拥有足够的权限),比如:重启,关机,关闭进程,创建进程等. 当然此文是适用于vbscript 微软官方的资料: 实例如下: 用WMI,先工程-引用 Microsoft WMI Scripting V1.1 Library 获取显卡/声卡/内存/操作系统的信息 声卡信息 Private Sub wmiSoundDeviceInfo()

  • VBS通过WMI获取CPU使用率的代码

    Python固然强大,但是调用WMI还是用VBS比较"正宗". 复制代码 代码如下: On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Selec

  • VBS调用WMI实现搜索硬盘mp3文件

    复制代码 代码如下: strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colFiles = objWMIService. _ ExecQuery("Select *

随机推荐