1

Тема: 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
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.