Тема: VBScript: выгрузка данных Active Directory в csv-файл
Скрипт формирует csv-файл по укзанному пути с выгрузкой указанных реквизитов AD. AD обходится рекурсивно, от указанной точки. (См. раздел "Настройки" в коде скрипта.) Полученный csv-файл удобно просматривать в Excel.
Option Explicit
Dim oFSO, oTextStream ' объекты для записи в файл
Dim sFileOut ' путь к файлу для выгрузки
Dim sStartPoint ' начальная точка входа в AD
Dim oHolding ' объект точки входа в AD
Dim aFieldsE ' массив названий полей элементов для выгрузки
Dim aFieldsC ' массив названий полей контейнеров для выгрузки
' => НАСТРОЙКИ ====================================================================================
sStartPoint = UCase("LDAP://OU=myou,DC=mydomain,DC=ru") ' начальная точка входа в AD
aFieldsE = Array("ou", "cn", "extensionAttribute14") ' массив названий полей элементов для выгрузки
aFieldsC = Array("ou") ' массив названий полей контейнеров для выгрузки
sFileOut = "C:\Temp\ad.csv" ' путь к файлу для выгрузки
' <= НАСТРОЙКИ ====================================================================================
Set oHolding = GetObject(sStartPoint)
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oTextStream = oFSO.OpenTextFile(sFileOut, 2, True)
WalkActiveDirectory oHolding
oTextStream.Close
WScript.Echo "Выгрузка данных AD в файл """ & sFileOut & """ завершена."
'==================================================================================================
Sub WalkActiveDirectory(ByRef oStart)
On Error Resume Next
Dim oOrgUnit ' вложенное подразделение
Dim i ' счётчик
ReDim aValuesE(UBound(aFieldsE)+1) ' массив значений полей элемента для выгрузки
ReDim aValuesC(UBound(aFieldsC)) ' массив значений полей контейнера для выгрузки
If IsEmpty(oStart.ou) Then ' это элемент
For i = 0 To UBound(aFieldsE)
aValuesE(i) = oStart.Get(aFieldsE(i))
Next
aValuesE(i) = oStart.ADsPath
'WScript.Echo Join(aValuesE, ";")
oTextStream.WriteLine Join(aValuesE, ";")
Else ' это контейнер
For i = 0 To UBound(aFieldsC)
aValuesC(i) = oStart.Get(aFieldsC(i))
Next
'WScript.Echo Join(aValuesC, ";")
oTextStream.WriteLine Join(aValuesC, ";")
For Each oOrgUnit In oStart
WalkActiveDirectory oOrgUnit
Next
End If
End SubВ названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

