Нужна помощь в назначении переменных для результатов массива VBScript WMI - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь написать VBScript, который получает 3 разных свойства из одного и того же класса WMI (Win32_DiskDrive). Этот класс дает массив, если у вас есть более одного диска. Я хочу присвоить все результаты из массива переменным 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

1 Ответ

0 голосов
/ 09 мая 2018

Вот одно из возможных решений, которое не требует массивов в вашем 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% и т. Д.

...