Тема: VBScript: Сбор всех настроек Internet Explorer из реестра
Задача в следующем:
1. Необходимо получить все пользовательские настройки Internet Explorer
2. Создать сводную таблицу по всем пользователям и всем настройкам (например, столбцы это настройки - параметры реестра, а строки логины пользователей)
Первую часть начали решать в лоб. То есть заносим в файл с разделителем "|" (так как такой не встречается ни в каких параметрах настроек IE) все ветки реестра с параметрами, отвечающие за настройки IE. Затем открываем в Excel c разделителем | и получаем вроде бы то что нам нужно.
strComputer = "." ' Скорее всего для этой задачи не понадобится
Set objNet = WScript.CreateObject("WScript.NetWork") 'Объект для получения имени пользователя
Set WshShell = WScript.CreateObject("WScript.Shell") '
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") 'Объект для файловой системы (нужен для результирующего файла)
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") ' Подключение к реестру
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_CURRENT_CONFIG = &H80000005
Const REG_SZ = 1
Const REG_EXPAND_SZ = 2
Const REG_BINARY = 3
Const REG_DWORD = 4
Const REG_MULTI_SZ = 7
ResultPath = "d:\"
ResultFileName = objNet.UserName & ".txt"
Const Internet_Settings = "Software\Microsoft\Windows\CurrentVersion\Internet Settings"
Function ReadKey(strKey)
'Чтение параметров раздела
intRes = objReg.EnumValues(HKEY_CURRENT_USER, strKey, sNames, Types)
If intRes <> 0 Then
ScriptError = True
End If
If IsArray(sNames) Then
i = 0
For Each Param In sNames
If Types(i) = REG_SZ Then
intRes = objReg.GetStringValue(HKEY_CURRENT_USER, strKey, Param, Val)
Elseif Types(i) = REG_EXPAND_SZ Then
intRes = objReg.GetExpandedStringValue(HKEY_CURRENT_USER, strKey, Param, Val)
Elseif Types(i) = REG_BINARY Then
intRes = objReg.GetBinaryValue(HKEY_CURRENT_USER, strKey, Param, Val)
Elseif Types(i) = REG_DWORD Then
intRes = objReg.GetDWORDValue(HKEY_CURRENT_USER, strKey, Param, Val)
Val = Right("00000000" & LCase(Hex(Val)), 8)
Elseif Types(i) = REG_MULTI_SZ Then
intRes = objReg.GetMultiStringValue(HKEY_CURRENT_USER, strKey, Param, Val)
End If
If intRes <> 0 Then
ScriptError = True
End If
' Дополнительные преобразования бинарного и многострочного типов
If Types(i) = REG_BINARY Then
For j = 0 To UBound(Val)
Val(j) = Right("00" & Hex(Val(j)), 2)
Next
Val = Join(Val)
Elseif Types(i) = REG_MULTI_SZ Then
Val = vbCrLf & Join(Val, vbCrLf)
End If
'Вот сюда нужно добавить функцию записи полученного значения в файл в нужном нам формате
objResult.WriteLine "HKEY_CURRENT_USER\" & strKey & "\" & Param & "|" & Val
i = i + 1
Next
End If
'Обход подразделов
intRes = objReg.EnumKey(HKEY_CURRENT_USER, strKey, sNames)
If intRes <> 0 Then
ScriptError = True
End If
If IsArray(sNames) Then
For Each strSubKey In sNames
ReadKey strKey & "\" & strSubKey
Next
End If
End Function
on Error resume Next
Set objResult = objFSO.CreateTextFile(ResultPath & ResultFileName, True)
objResult.WriteLine "Parameter|Value"
ReadKey Internet_Settings
Set objNet = Nothing
Set objFSO = Nothing
WScript.Quit 0
Но данный метод скорее всего не подойдет по одной простой причине: параметров настроек IE у разных пользователей - разное. То есть в итоге с таким способом мы не сможем получить таблицу, у которой столбцы - это параметры. Так как у одного пользователя есть в реестре тот или иной параметр, а у другого его нет. Значит значения этих параметров у этих пользователей в сводной таблице будут сдвинуты.
Прошу у знатаков помощи по данному вопросу:
1. Есть ли способ как-то привести полученные данные к унифицированному виду? То есть для всех пользователей одно количество столбцов?
2. Есть ли идеи как реализовать задачу другим способом?

