You can use following LDAP search filter to list all the groups that a user is a member of.
member:1.2.840.113556.1.4.1941:=(cn=user1,cn=users,DC=x)
However this operation can be very expensive on the DC if you have a deep nesting structure for your groups.
You can use Apache JMeter to do LDAP load test.
Ever wonder a simpler way (without any third-party tool involved) to test the performance? Well, try MS dsquery.
First of all, get the user's DN string with the following command
dsquery user -name "john*"Assume it returns
"CN=john smith,CN=Users,DC=ds03,DC=local"Then execute the following command to see if the results are expected.
dsquery * domainroot -filter "(&(member:1.2.840.113556.1.4.1941:=CN=john smith,CN=Users,DC=ds03,DC=local))" -limit 10Now, save the following as a DOS batch file, don't forget to modify it to use your own LDAP filter.
@echo off @rem -------------------------------------------- setlocal ENABLEEXTENSIONS set start_time=%time% echo Beginning at: %start_time% echo Running Timed Batch File echo. @rem CHANGE YOUR OWN LDAP Filter dsquery * domainroot -filter "(&(member:1.2.840.113556.1.4.1941:=CN=john smith,CN=Users,DC=ds03,DC=local))" -limit 10 set stop_time=%time% echo. echo Timed Batch File Completed echo Start time: %start_time% echo Stop time : %stop_time% set TEMPRESULT=%start_time:~0,2% call:FN_REMOVELEADINGZEROS set start_hour=%TEMPRESULT% @rem set TEMPRESULT=%start_time:~3,2% call:FN_REMOVELEADINGZEROS set start_min=%TEMPRESULT% @rem set TEMPRESULT=%start_time:~6,2% call:FN_REMOVELEADINGZEROS set start_sec=%TEMPRESULT% @rem set TEMPRESULT=%start_time:~9,2% call:FN_REMOVELEADINGZEROS set start_hundredths=%TEMPRESULT% set TEMPRESULT=%stop_time:~0,2% call:FN_REMOVELEADINGZEROS set stop_hour=%TEMPRESULT% @rem set TEMPRESULT=%stop_time:~3,2% call:FN_REMOVELEADINGZEROS set stop_min=%TEMPRESULT% @rem set TEMPRESULT=%stop_time:~6,2% call:FN_REMOVELEADINGZEROS set stop_sec=%TEMPRESULT% @rem set TEMPRESULT=%stop_time:~9,2% call:FN_REMOVELEADINGZEROS set stop_hundredths=%TEMPRESULT% set /A start_total=(((((%start_hour%*60)+%start_min%)*60)+%start_sec%)*100)+%start_hundredths% set /A stop_total=(((((%stop_hour%*60)+%stop_min%)*60)+%stop_sec%)*100)+%stop_hundredths% set /A total_time=%stop_total% - %start_total% set /A total_hundredths=%total_time% %% 100 set total_hundredths=00%total_hundredths% set total_hundredths=%total_hundredths:~-2% set /A total_time=%total_time% / 100 set /A total_sec="%total_time% %% 60" set total_sec=00%total_sec% set total_sec=%total_sec:~-2% set /A total_time=%total_time% / 60 set /A total_min="%total_time% %% 60" set total_min=00%total_min% set total_min=%total_min:~-2% set /A total_time=%total_time% / 60 set /A total_hour="%total_time% %% 60" @rem Handle if it wrapped around over midnight if "%total_hour:~0,1%"=="-" set /A total_hour=%total_hour% + 24 echo Total time: %total_hour%:%total_min%:%total_sec%.%total_hundredths% @rem -------------------------------------------- @rem Exit the BAT Program endlocal goto END @rem -------------------------------------------- @rem FN_REMOVELEADINGZEROS function @rem Used to remove leading zeros from Decimal @rem numbers so they are not treated as Octal. :FN_REMOVELEADINGZEROS if "%TEMPRESULT%"=="0" goto END if "%TEMPRESULT:~0,1%" NEQ "0" goto END set TEMPRESULT=%TEMPRESULT:~1% goto FN_REMOVELEADINGZEROS @rem -------------------------------------------- @rem BAT PROGRAM / FUNCTION FILE EXIT :END