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:

<b>for /f "Tokens=*" %%a in ('SortADU') do (
 @echo %%a
)</b>
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 =  <div class="Contentquote"><center>" ^& ouc ^& oun ^& </center></div> <div class="Contentquote"><center> ^&  strDN ^&  </center></div>">>"%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