DHCP Roll Call

Scriptable method for obtaining a list of DHCP server names in a domain.

Bill: Do you know an easy way of getting a list of DHCP servers for the current domain? NETSH gives me all the servers in the forest, which, in my organization, runs into the hundreds. I have tried dsget and dsquery too:

dsquery * -Filter (objectclass=dhcpclass) -attr dhcpserver cn

and have tried scripting the LDAP queries, without success. What am I missing?
—Alan M. Kaplan, MCSE

Alan: It turns out to be something of a trick to do this search. Active Directory stores the DHCP server information in a series of DHCPClass objects in this container:

cn=NetServices,cn=Services,cn=Configuration,dc=<domain>,
dc=<root>

The browse tool in the DHCP console simply enumerates the objects in this container and displays the content of an attribute called "dhcpservers" — note the "s" at the end of the attribute name. Your dsquery statement would have done the same but it has a couple of syntax errors. Here is a corrected expression:

dsquery * forestroot -filter (objectclass=dhcpclass) -attr *

Get Help from Bill

Got a Windows or Exchange question or need troubleshooting help? Or maybe you want a better explanation than provided in the manuals? Describe your dilemma in an e-mail to Bill at mailto:[email protected]; the best questions get answered in this column.

When you send your questions, please include your full first and last name, location, certifications (if any) with your message. (If you prefer to remain anonymous, specify this in your message but submit the requested information for verification purposes.)

Unfortunately, as you'll see when you try the expression, the dhcpservers attribute doesn't appear in the list of attributes for the DHCPClass objects. That's because the dhcpservers attribute uses an IA5-String syntax (also called "printable string") which, apparently, dsquery can't process. You can view the content of the dhcpservers attribute using ADSIEdit or ldp. The attribute contains a concatenated set of values in this format:

i<ip_address>$rcn=<common_name>$f<flags>$s<server_FQDN>$;

An actual entry for a server named W2K3-S5 in the domain Exorg.com with the IP address 10.0.0.133 looks like this:

i10.0.0.133$rcn=10.0.0.133$f0x00000000$sW2K3-S5.exorg.com$

Readers: I proceeded to send Alan a simple few lines of script, which he tried with mixed results. The dhcpservers attribute can have a variety of formats that require special handling. Alan responded with a rework of the script that included a great deal more error checking, a nice set of functions for doing the report formatting and a section for saving the output to a file. Here is a link to Alan's code:

http://mcpmag.com/downloads/2004/searchdhcpbydomain.txt

which I'm including with his permission. Thanks, Alan!

As with any script you download from the Internet, you should test it thoroughly in a lab environment before using it in production. (And if you have trouble downloading the script, write to Michael Domingo, Editor, MCPmag.com at [email protected] to get it e-mailed to you.)

About the Author

Contributing Editor Bill Boswell, MCSE, is the principal of Bill Boswell Consulting, Inc. He's the author of Inside Windows Server 2003 and Learning Exchange Server 2003 both from Addison Wesley. Bill is also Redmond magazine's "Windows Insider" columnist and a speaker at MCP Magazine's TechMentor Conferences.

Featured