A. I recently needed to quickly document a client's OU structure for a domain and had to include in the documentation the number of users, groups, computers, and contacts in each OU. To achieve this, I wrote a short script--oulist.vbs--that uses Microsoft Active Directory Service Interfaces (ADSI) to interrogate Active Directory (AD) and produce a report that details the specified container's content. To use oulist.vbs, you can either save the following code into a file (name it oulist.vbs) or download the script.

Option Explicit

Dim strLdapPath, objConnection, objChild, dtmCreate
Dim totalUsers, totalComputers, totalGroups, totalContacts

totalUsers=0
totalGroups=0
totalComputers=0
totalContacts=0

' Check that all required arguments have been passed.
If Wscript.Arguments.Count
<p>Oulist.vbs calls the GetDetail function to check the content of the passed container. The script then checks for OUs in the current container and, for each OU it finds, calls the function again. A process that calls itself is known as a recursive process. Running oulist.vbs produces output on screen that's similar to the following:</p>
<pre>C:\scripts>cscript oulist.vbs dc=savilltech,dc=net
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

 dc=savilltech,dc=net
 (0 users 0 groups 0 computers 0 contacts)
 - OU=Domain Controllers
   (0 users 0 groups 1 computers 0 contacts)
 - OU=test
   (0 users 0 groups 0 computers 0 contacts)
   - OU=subtest1
     (0 users 0 groups 0 computers 0 contacts)
     - OU=subsubtest1
       (0 users 0 groups 0 computers 0 contacts)
     - OU=subsubtest2
       (0 users 0 groups 0 computers 0 contacts)
   - OU=subtest2
     (0 users 0 groups 0 computers 0 contacts)
     - OU=subsub2test1
       (0 users 0 groups 2 computers 0 contacts)
     - OU=subsub2test2
       (1 users 1 groups 1 computers 1 contacts)
       - OU=subsubsubtest
         (0 users 0 groups 0 computers 0 contacts)

Totals: 1 users 1 groups 4 computers 1 contacts
Operation Completed

It's important to use the Cscript command; if you don't specify Cscript, every line of text in the output will pop up in a dialog box.