I have scripted SortADU.bat to return the distinguishedName of every user in the domain, sorted by distinguishedName within container and/or OU.
The syntax for using SortADU.bat is:
for /f "Tokens=*" %%a in ('SortADU') do ( @echo %%a )SortADU.bat contains:
@echo off setlocal if exist "%TEMP%\SortADU.vbs" goto start if exist "%TEMP%\SortADU.tm1" del /q "%TEMP%\SortADU.tm1" if exist "%TEMP%\SortADU.tm2" del /q "%TEMP%\SortADU.tm2" @echo.On Error Resume Next>"%TEMP%\SortADU.vbs" @echo.Dim objConnection, objCommand, objRootDSE, strDNSDomain>>"%TEMP%\SortADU.vbs" @echo.Dim strFilter, strQuery, objRecordSet>>"%TEMP%\SortADU.vbs" @echo.dim fso, contents, writefile>>"%TEMP%\SortADU.vbs" @echo.set fso = CreateObject("Scripting.FileSystemObject") >>"%TEMP%\SortADU.vbs" @echo.set writefile = fso.CreateTextFile("%TEMP%\SortADU.tm1", 2) >>"%TEMP%\SortADU.vbs" @echo.Set objConnection = CreateObject("ADODB.Connection")>>"%TEMP%\SortADU.vbs" @echo.Set objCommand = CreateObject("ADODB.Command")>>"%TEMP%\SortADU.vbs" @echo.objConnection.Provider = "ADsDSOOBject">>"%TEMP%\SortADU.vbs" @echo.objConnection.Open "Active Directory Provider">>"%TEMP%\SortADU.vbs" @echo.Set objCommand.ActiveConnection = objConnection>>"%TEMP%\SortADU.vbs" @echo.Set objRootDSE = GetObject("LDAP://RootDSE")>>"%TEMP%\SortADU.vbs" @echo.strDNSDomain = objRootDSE.Get("defaultNamingContext")>>"%TEMP%\SortADU.vbs" @echo.strBase = "<LDAP://" ^& strDNSDomain ^& ">" >>"%TEMP%\SortADU.vbs" @echo.strFilter = "(&(objectCategory=person)(objectClass=user))">>"%TEMP%\SortADU.vbs" @echo.strAttributes = "distinguishedName">>"%TEMP%\SortADU.vbs" @echo.strQuery = strBase ^& ";" ^& strFilter ^& ";" ^& strAttributes ^& ";subtree">>"%TEMP%\SortADU.vbs" @echo.objCommand.CommandText = strQuery>>"%TEMP%\SortADU.vbs" @echo.objCommand.Properties("Page Size") = 99999>>"%TEMP%\SortADU.vbs" @echo.objCommand.Properties("Timeout") = 300>>"%TEMP%\SortADU.vbs" @echo.objCommand.Properties("Cache Results") = False>>"%TEMP%\SortADU.vbs" @echo.Set objRecordSet = objCommand.Execute>>"%TEMP%\SortADU.vbs" @echo.objRecordSet.MoveFirst>>"%TEMP%\SortADU.vbs" @echo.Do Until objRecordSet.EOF>>"%TEMP%\SortADU.vbs" @echo. strDN = objRecordSet.Fields("distinguishedName")>>"%TEMP%\SortADU.vbs" @echo. ouPath = Split(strDN, ",") >>"%TEMP%\SortADU.vbs" @echo. ouLen = Len(ouPath(1)) >>"%TEMP%\SortADU.vbs" @echo. ouNameLen = ouLen - 3 >>"%TEMP%\SortADU.vbs" @echo. ouc = Left (ouPath(1), 3) >>"%TEMP%\SortADU.vbs" @echo. oun = Right(ouPath(1), ouNameLen) >>"%TEMP%\SortADU.vbs" @echo. contents =" ^& ouc ^& oun ^& ">>"%TEMP%\SortADU.vbs" @echo. writefile.writeLine contents>>"%TEMP%\SortADU.vbs" @echo. objRecordSet.MoveNext>>"%TEMP%\SortADU.vbs" @echo.Loop>>"%TEMP%\SortADU.vbs" @echo.objConnection.Close>>"%TEMP%\SortADU.vbs" @echo.writefile.close>>"%TEMP%\SortADU.vbs" @echo.Set objConnection = Nothing>>"%TEMP%\SortADU.vbs" @echo.Set objCommand = Nothing>>"%TEMP%\SortADU.vbs" @echo.Set objRootDSE = Nothing>>"%TEMP%\SortADU.vbs" @echo.Set objRecordSet = Nothing>>"%TEMP%\SortADU.vbs" :start cscript //nologo "%TEMP%\SortADU.vbs" sort "%TEMP%\SortADU.tm1" /O "%TEMP%\SortADU.tm2" del /q %TEMP%\SortADU.tm1" for /f "Tokens=*" %%a in ('type "%TEMP%\SortADU.tm2"') do ( call :out %%a ) del /q %TEMP%\SortADU.tm2" endlocal goto :EOF :out @echo %2^& strDN ^&
0 comments
Hide comments