Earlier this year, I had a need in a project to set the password for a large number of Active Directory accounts simultaneously. Here’s the solution I came up with for this particular need.
To use this technique, you’ll need ldifde (included with Windows Server 2003), grep (included with Mac OS X and most Linux distributions; Win32 versions available on the Internet), a text editor with search and replace functionality (advanced geeks are free to use sed), and dsmod (from the Windows Server 2003 Resource Kit).
First, export the list of user accounts out of Active Directory using ldifde. The command will look something like this:
ldifde -d “CN=Users,DC=company,DC=com†-r “(objectclass=user)†-f c:\export-1.ldif
This creates a file called “export-1.ldifâ€. Using grep, filter this file down to only the full distinguished names of the users:
less export-1.ldif | grep 'dn: ' > export-2.ldif
Note that you’ll need to use “type†instead of “less†on a Win32 system. Also, on a Win32 system you’ll need to use double quotes instead of single quotes in the grep command. This creates a file called “export-2.ldifâ€.
Load this file into the text editor and make the following changes:
- Remove all occurrences of “dn: †(there is a space after the colon)
- Add a double quotation mark before CN= at the start of each line
- Add a double quotation mark after =com at the end of each line
Save this modified file as “export-3.ldifâ€.
Finally, pipe this file through to the dsmod program to set passwords for all the users in the file:
type export-3.ldif | dsmod user -pwd newpass1 -mustchpwd yes
Full help for the dsmod command line syntax is available using “dsmod /?†or “dsmod user /?â€.
You can add “ > filename†to the end of the above command to log the output of the dsmod command to a file. You can then use grep to parse this file to ensure that the command was successful for all users.
Tags: ActiveDirectory, Windows


2 comments
Thursday, December 7, 2006 at 4:34 pm
thefish
or you can just do it all on windows:
dsquery user | dsmod user -mustchpwd yes
This will change it for every user object, best to change the dsquery filter a bit to suit you!
Thursday, December 7, 2006 at 4:41 pm
slowe
Yep, you’re absolutely right–I mentioned that in a follow-on posting:
http://blog.scottlowe.org/2006/05/16/mass-password-changes-in-ad-revisited/
Thanks,
Scott