Pinpointing problems with Windows 2000 domain controllers can be an exercise in frustration because it requires testing all of the various components involved with them. A great way to save a lot of time and come up with a timely resolution is to use the Windows 2000 Server Resource Kit tool DCDiag.

Downloading and running DCDiag
You can download DCDiag for free from the Windows 2000 Resource Kit section of the Microsoft Web site. The downloaded file is named Dcdiag_setup.exe. To install the utility, just execute this installer and accept the defaults, which will place the command line executable Dcdiag.exe in C:\Program Files\Resource Kit.

I had problems executing Dcdiag.exe from multiple servers—even domain controllers. The program claimed that it could not find a specific entry in Ntdsapi.dll. The servers in question were a Windows 2000 Server running Service Pack 3 in my home lab and a production domain controller running Windows 2000 Service Pack 2.

Since DCDiag is more of a troubleshooting utility, I decided to give it a shot from a workstation instead. That worked, so all of the examples in this article were done running DCDiag from a Windows XP Professional workstation.

Using DCDiag
After you install the utility, you can use it to test all aspects of your domain controllers. You need to run DCDiag from the Windows command line, from the Resource Kit directory. For example, if your system files are stored on the C: drive, you would run C:\Program Files\Resource Kit>dcdiag.

DCDiag includes a number of command line options that allow you to run different tests and with different options. There are dozens of command line parameters for DCDiag. I will go over some examples first and then show the output from the dcdiag /? command.

Running the default tests
Running the dcdiag command with no testing parameters will cause the utility to run a standard set of diagnostics against domain controllers. Since I’m running DCDiag from a workstation, I need to specify a domain controller on the command line for the utility to run against. I have two Windows 2000 domain controllers, win2ksvr and lab2, in the domain in my testing lab. To run DCDiag, I need to specify one of these servers, as shown in this example.

As you can see, DCDiag reported some errors during this quick scan, which took less than 30 seconds to run. First, the utility was unable to perform DNS lookups of the server names. Second, there were a number of file replication errors. And third, the systemlog test failed.

The DNS error can result in problems accessing Active Directory. The errors related to file replication services can create problems with group policies and login scripts. The third error indicates a problem with the system event logs.

A little more information, please
Although this information can be extremely valuable in troubleshooting problems, the example is limited to running against one server. If you are experiencing problems and are not sure what is causing them, you may not want to confine your test to just one server. In this instance, you would append the /a parameter to the command to test all of the servers in the site. I am not going to show the full details from my /a scan, but here is a snippet that would play an important part in troubleshooting a problem. Upon further investigation, it reveals that the lab2 server in the domain is down.

Running specific tests
If you have a lot of domain controllers and suspect a specific area in which the problem may lie, you may want to run one specific test. You can accomplish this scan by specifying the /test: parameter on the command line. For example, to test connectivity to all of your domain controllers, use the following command:
dcdiag /s:servername /a /test:connectivity

You still need to specify one server that you know is running in order for the utility to be able to work with the domain.

DCDiag is a self-explanatory utility, and the built-in help will provide all of the details you need for the multitude of tests available with it. In addition, the DCDiag download includes an HTML help file that lists all of the command line options available. For your convenience, here is a quick look at these command line options.