Тема: VBScript: Сопоставление двух массивов с совпадающими значениями
Здравствуйте!
Прошу ногами не бить – только начинаю осваивать VBScript. Возникла потребность определить чьи флэшки втыкались в компьютер.
1. Имеется массив, в котором перечислены имеющиеся подключения: серийник флэшки;модель флэшки. Вытаскиваю это из реестра следующим кодом:
On Error Resume Next
Dim subkey, subsubkey 'ключ, подключ
Dim arrSubKeys(), arrSubKeys1() 'массивы подключей
Dim objReg 'реестр
Dim wshShell 'оболочка
Dim strComputer 'компьютер
Dim compName 'имя компьютера
Dim repFile 'файл отчета
Dim repFileName 'имя файла отчета
Dim USBMas() 'массив для полученных значений
Const HKLM = &H80000002
Const strValueName = "FriendlyName" 'модель флэшки
Const strKeyPath = "SYSTEM\CurrentControlSet\Enum\USBSTOR" 'раздел с информацией об USB
strComputer = "." 'местный компьютер
Set wshShell = CreateObject("WScript.Shell")
compName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") 'получаем имя компьютера
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv") 'получаем провайдера реестра
objReg.EnumKey HKLM, strKeyPath, arrSubKeys 'получаем подразделы
t = 0 'счетчик
If IsArray(arrSubKeys) Then
For Each subkey In arrSubKeys 'для каждого подраздела
objReg.EnumKey HKLM, strKeyPath & "\" & subkey, arrSubKeys1 'получаем подразделы подразделов
If IsArray(arrSubKeys1) Then 'снова если массив
For Each subsubkey In arrSubKeys1 'для каждого подраздела подразделов
ReDim Preserve USBMas(1, t)
USBMas(0, t) = UCase(Left(subsubkey, Len(subsubkey) - 2)) 'получаем серийный номер флэшки
objReg.GetStringValue HKLM, strKeyPath & "\" & subkey & "\" & subsubkey, strValueName, USBMas(1, t) 'получаем модель флешки
t = t + 1
Next
End If
Next
End If
'На всякий случай выведем в htm-файл в папке скрипта
Set fso = CreateObject("Scripting.FileSystemObject")
repFileName = wshShell.CurrentDirectory & "\" & compName & "-" & Date & ".htm"
Set repFile = fso.CreateTextFile(repFileName, True)
repFile.WriteLine "<html><title>USBMaster - Report</title><body><table border=" & Chr(34) & _
1 & Chr(34) & " width = 90% align = center><tr><th colspan=" & Chr(34) & 2 & Chr(34) & _
">Список флэшек, установленных на компьютере " & compName & _
" " & Date & " г.</th></tr><tr><td> Серийный номер </td><td> Наименование </td></tr>"
If IsArray(USBMas) Then
For t = LBound(USBMas, 2) To UBound(USBMas, 2) 'заполняем таблицу
repFile.WriteLine "<tr><td>" & USBMas(0, t) & "</td><td>" & USBMas(1, t) & "</td></tr>"
Next
End If
repFile.WriteLine "</table></body></html>"
repFile.Close
2. Имеется cvs-файл, в котором перечислены "легальные" флэшки по строчкам серийник;модель;объем;владелец.
3. Нужно сопоставить два набора данных (полученный выше приведенным кодом и содержимое cvs-файла). Ключевое поле - серийный номер.
Результат хотелось бы видеть в формате серийник;модель;объем;владелец. А если там еще и будут столбцы о дате/времени первого-последнего подключения и наличии/отсутствии записи о серийнике в файле Windows\setupapi.log, то счастью моему не будет предела.
Это возможно?

