You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:将VBScript获取的WMI Win32_DiskDrive数组结果赋值给SCCM变量

解决Win32_DiskDrive属性赋值到SCCM变量的问题

嘿,我懂你现在卡在哪了——当WMI返回一堆磁盘驱动器实例的时候,要把所有实例的属性都传递给SCCM变量确实得花点心思。下面我给你整理一套完整的解决方案,一步步帮你搞定:

完整脚本示例

Const wbemFlagReturnImmediately = &h10 
Const wbemFlagForwardOnly = &h20 

Dim objWMIService, objItem, colItems, strComputer
Dim diskInfoArray(), indexCounter, diskInfoString
Dim Index, Model, Size

strComputer = "." ' 本地计算机,远程机器的话替换成对应名称/IP

' 连接到本地WMI服务
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

' 查询Win32_DiskDrive,只获取需要的三个属性
Set colItems = objWMIService.ExecQuery( _
    "SELECT Index, Model, Size FROM Win32_DiskDrive", _
    "WQL", _
    wbemFlagReturnImmediately + wbemFlagForwardOnly)

' 初始化存储信息的数组和计数器
indexCounter = 0
ReDim diskInfoArray(colItems.Count - 1)

' 遍历每个磁盘驱动器实例
For Each objItem In colItems
    ' 提取属性,同时处理可能的空值避免报错
    Index = objItem.Index
    Model = Trim(objItem.Model)
    
    ' 把字节数转换为更易读的GB格式,空值则显示"未知"
    If IsNull(objItem.Size) Then
        Size = "未知"
    Else
        Size = Round(objItem.Size / 1024 / 1024 / 1024, 2) & " GB"
    End If
    
    ' 把当前磁盘的信息拼接成字符串存入数组
    diskInfoArray(indexCounter) = "索引: " & Index & " | 型号: " & Model & " | 容量: " & Size
    indexCounter = indexCounter + 1
Next

' 把数组转成单个字符串,用分号分隔(也可以换成换行符vbCrLf)
diskInfoString = Join(diskInfoArray, "; ")

' 赋值给SCCM任务序列变量
Dim oTSenv
Set oTSenv = CreateObject("Microsoft.SMS.TSEnvironment")
' 这里的变量名可以自定义,比如DiskDriveDetails
oTSenv("DiskDriveDetails") = diskInfoString

' 调试用:输出结果确认(测试阶段可以保留)
WScript.Echo "磁盘信息已写入SCCM变量:" & diskInfoString

关键细节说明

  • 多实例遍历:用For Each循环遍历所有Win32_DiskDrive实例,确保不会漏掉任何一个驱动器。
  • 空值处理:部分特殊磁盘(比如虚拟磁盘)可能没有Size属性,加IsNull判断能避免脚本运行报错。
  • 数组转字符串:SCCM任务序列变量大多是单值字符串,用Join把多个磁盘的信息拼接成一个带分隔符的字符串,方便后续在任务序列中调用。
  • SCCM变量赋值:通过Microsoft.SMS.TSEnvironment对象操作变量是SCCM的标准方式,变量名可以根据你的需求自定义。

可选优化:单独存储多值属性

如果你想把每个属性单独存成多值变量(比如所有磁盘的索引),可以这么写:

' 收集所有磁盘索引到数组
Dim indexArray(), idx
idx = 0
ReDim indexArray(colItems.Count - 1)
For Each objItem In colItems
    indexArray(idx) = objItem.Index
    idx = idx + 1
Next
' 赋值给多值变量(SCCM支持用逗号分隔的多值)
oTSenv("DiskIndexes") = Join(indexArray, ",")

这样你就能在后续的SCCM任务序列里轻松调用这些变量啦!

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:22:42