求助:将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
相关产品推荐
相关产品推荐

