【问题标题】:Remote WMI Call for Disk Serial Number远程 WMI 调用磁盘序列号
【发布时间】:2012-01-23 23:24:26
【问题描述】:

我是一个相对缺乏经验的编码人员,并且在通过 VBScript 远程获取物理磁盘序列号时遇到了问题。

目前,我正在使用脚本专家提供的 Scriptomatic V2 中的默认脚本。我从 2003 服务器运行它并试图从 Win2000 和 WinXP SP2/SP3 系统获取信息。我从几个教程中看到推荐的 WMI 类是 Win32_PhysicalMedia。

包括有用的位:

On Error Resume Next

Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

arrComputers = Array("STN_XP","STN_2000")
  For Each strComputer In arrComputers
    WScript.Echo
    WScript.Echo "=========================================="
    WScript.Echo "Computer: " & strComputer
    WScript.Echo "=========================================="

    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMedia", "WQL", _
                                      wbemFlagReturnImmediately + wbemFlagForwardOnly)

    For Each objItem In colItems
      '(Removed a couple from the code, just showing the useful ones)
      WScript.Echo "Model: " & objItem.Model
      WScript.Echo "Name: " & objItem.Name
      WScript.Echo "SerialNumber: " & objItem.SerialNumber
      WScript.Echo "Tag: " & objItem.Tag
      WScript.Echo
      Next
    Next

现在我得到的输出如下:注意这是运行所有调用的脚本的确切输出; objItem.Tag 值之外没有数据返回:

==========================================
Computer: STN_XP
==========================================
Capacity:
Caption:
CleanerMedia:
CreationClassName:
Description:
HotSwappable:
Manufacturer:
MediaDescription:
MediaType:
Model:
Name:
OtherIdentifyingInfo:
PartNumber:
PoweredOn:
Removable:
Replaceable:
SerialNumber:
SKU:
Status:
Tag: \\.\PHYSICALDRIVE0
Version:
WriteProtectOn:

==========================================
Computer: STN_2000
==========================================

所有计算机都连接到一个域,我已登录到主管理员帐户。使用其他一些 WMI 库,我获得了数据,并且到目前为止,在一台特定的计算机上,我收到了一个序列号(和标签,但没有别的)。我已经阅读了这对于 Vista 来说是一个问题,您需要在管理员模式下运行。由于正在使用的操作系统,这在这里应该不是问题。有谁知道可能出了什么问题?

作为后续问题,有人知道如何从 2000 站获取序列号吗?

提前感谢您能给我的任何帮助。

【问题讨论】:

  • 那么,问题是什么?
  • 问题是如何远程获取硬盘的序列号。 objItem.SerialNumber 应该可以工作,但不能。我需要做些什么才能访问它,或者我可以采取其他方法吗?
  • 啊,对不起。我才明白你的意思。没有数据被返回。我看到的输出完全如图所示,除了 Tag: 之外没有数据被正确返回。编辑了 OP 以澄清。

标签: vbscript wmi


【解决方案1】:

用单引号注释掉 On Error Resume Next,并发布可能返回的错误消息。

【讨论】:

  • 我几乎立即在 Win2000 工作站上收到错误消息。 =========================================== 计算机:STN_11 ===== ====================================== C:\Documents and Settings\Administrator\Desktop\Scriptomatic\ temp_script.sm(16, 4) (null): 0x80041010
  • 对于 XP 站,我收到 CDate 的不匹配错误(因此未在原始输出中显示)。删除除序列号和标签之外的所有调用:======================================== ==计算机:STN_16 ============================================序列号:标签: \\.\PHYSICALDRIVE0
  • 在 2000 机器上您似乎没有安装 WMI 提供程序。您可以通过添加删除程序 -> Windows 组件 -> 管理和监控工具 -> WMI Windows Management Installer Provider 安装它。对于第二个,它似乎正在工作,但是您的硬件供应商没有填充此字段。您可以尝试使用 WMITools 并手动浏览以查看它是否可能填充到其他属性或对象中。 microsoft.com/download/en/…
  • 谢谢,我下载了 WMITools,它帮助我更轻松地检查了几个课程。也一直在网上查这个。似乎对此的普遍共识是,通过 WMI 调用查找序列号是错误的和喜怒无常的。感谢您的所有帮助/建议,但看起来我将手动执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 2015-03-27
  • 2022-07-02
相关资源
最近更新 更多