需要帮助将变量分配给 VBScript WMI 数组结果
Need help assigning variables to VBScript WMI array results
我正在尝试编写一个 VBScript,它从同一个 WMI class (Win32_DiskDrive
) 中提取 3 个不同的属性。如果您有多个驱动器,那 class 会给出一个数组。我想将数组中的所有结果分配给 SCCM 变量,但这样做很困难,因为我以前从未做过这样的事情。
这是我的脚本:
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Dim objWMIService, objItem, colItems, strComputer, Index, Model, Size
Dim Index(4)
Index(0) = Index0
Index(1) = Index1
Index(2) = Index2
Index(3) = Index3
Dim Model(4)
Model(0) = Model0
Model(1) = Model1
Model(2) = Model2
Model(3) = Model3
Dim Size(4)
Size(0) = Size0
Size(1) = Size1
Size(2) = Size2
Size(3) = Size3
strComputer = "."
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
Set env = CreateObject("Microsoft.SMS.TSEnvironment")
For Each objItem in colItems
Index(4) = objItem.Index
Model(4) = objItem.Model
Size(4) = objItem.Size
env("DriveIndex") = Index(4)
env("DriveModel") = Model(4)
env("DriveBytes") = Size(4)
Next
这是一种可能的解决方案,它不需要在您的 vbscript 中使用数组。它将输出一个带有驱动器编号后缀的 TS 变量(从 0 开始,或者您设置 iCount
开始的任何内容)。
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Dim objWMIService, objItem, colItems, strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
Set env = CreateObject("Microsoft.SMS.TSEnvironment")
iCount = 0
For Each objItem in colItems
env("DriveIndex" & iCount) = objItem.Index
env("DriveModel" & iCount) = objItem.Model
env("DriveBytes" & iCount) = objItem.Size
iCount = iCount + 1
Next
因此,如果您有 3 个驱动器,您将在 SCCM 中得到类似这样的结果:
DriveIndex0 = TheIndexOf0
DriveModel0 = TheModelOf0
DriveSize0 = TheSizeOf0
DriveIndex1 = TheIndexOf1
DriveModel1 = TheModelOf1
DriveSize1 = TheSizeOf1
DriveIndex2 = TheIndexOf2
DriveModel2 = TheModelOf2
DriveSize2 = TheSizeOf2
随后您可以像往常一样在 TS 中引用每个变量。 %DriveIndex0%
、%DriveIndex1%
等
我正在尝试编写一个 VBScript,它从同一个 WMI class (Win32_DiskDrive
) 中提取 3 个不同的属性。如果您有多个驱动器,那 class 会给出一个数组。我想将数组中的所有结果分配给 SCCM 变量,但这样做很困难,因为我以前从未做过这样的事情。
这是我的脚本:
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Dim objWMIService, objItem, colItems, strComputer, Index, Model, Size
Dim Index(4)
Index(0) = Index0
Index(1) = Index1
Index(2) = Index2
Index(3) = Index3
Dim Model(4)
Model(0) = Model0
Model(1) = Model1
Model(2) = Model2
Model(3) = Model3
Dim Size(4)
Size(0) = Size0
Size(1) = Size1
Size(2) = Size2
Size(3) = Size3
strComputer = "."
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
Set env = CreateObject("Microsoft.SMS.TSEnvironment")
For Each objItem in colItems
Index(4) = objItem.Index
Model(4) = objItem.Model
Size(4) = objItem.Size
env("DriveIndex") = Index(4)
env("DriveModel") = Model(4)
env("DriveBytes") = Size(4)
Next
这是一种可能的解决方案,它不需要在您的 vbscript 中使用数组。它将输出一个带有驱动器编号后缀的 TS 变量(从 0 开始,或者您设置 iCount
开始的任何内容)。
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Dim objWMIService, objItem, colItems, strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
Set env = CreateObject("Microsoft.SMS.TSEnvironment")
iCount = 0
For Each objItem in colItems
env("DriveIndex" & iCount) = objItem.Index
env("DriveModel" & iCount) = objItem.Model
env("DriveBytes" & iCount) = objItem.Size
iCount = iCount + 1
Next
因此,如果您有 3 个驱动器,您将在 SCCM 中得到类似这样的结果:
DriveIndex0 = TheIndexOf0
DriveModel0 = TheModelOf0
DriveSize0 = TheSizeOf0
DriveIndex1 = TheIndexOf1
DriveModel1 = TheModelOf1
DriveSize1 = TheSizeOf1
DriveIndex2 = TheIndexOf2
DriveModel2 = TheModelOf2
DriveSize2 = TheSizeOf2
随后您可以像往常一样在 TS 中引用每个变量。 %DriveIndex0%
、%DriveIndex1%
等