There are four main ways to read the FSMO role holders in Active Directory, an easy way, the common way, the cool way and the hard way. Lets review them all:
The easy way:
NetDOM /query FSMO
The Common way:
How to Determine the RID, PDC, and Infrastructure FSMO Holders of a Selected Domain
The Cool Way
The hard way
Write a script to query ADSI edit to obtain the FSMO role holders. Fortunatly the hardwork has already been done for you.. Just paste the following for an example:
Option ExplicitDim WSHNetwork, objArgs, ADOconnObj, bstrADOQueryString, RootDom, RSObjDim FSMOobj,CompNTDS, Computer, Path, HelpTextSet WSHNetwork = CreateObject("WScript.Network")Set objArgs = WScript.ArgumentsHelpText = "This script will find the FSMO role owners for your domain." & Chr(13) &_ Chr(10) & "The syntax is as follows:" & Chr(13) & Chr(10) &_ "find_fsmo DC=MYDOM,DC=COM" & Chr(13) & Chr(10) &_ """Where MYDOM.COM is your domain name.""" & Chr(13) & Chr(10) & "OR:" &_ Chr(13) & Chr(10) & "find_fsmo MYDCNAME " & Chr(13) & Chr(10) &_ """Where MYDCNAME is the name of a Windows 2000 Domain Controller"""Select Case objArgs.Count Case 0 Path = InputBox("Enter your DC name or the DN for your domain"&_ " 'DC=MYDOM,DC=COM':","Enter path",WSHNetwork.ComputerName) Case 1 Select Case UCase(objArgs(0)) Case "?" WScript.Echo HelpText WScript.Quit Case "/?" WScript.Echo HelpText WScript.Quit Case "HELP" WScript.Echo HelpText WScript.Quit Case Else Path = objArgs(0) End Select Case Else WScript.Echo HelpText WScript.QuitEnd SelectSet ADOconnObj = CreateObject("ADODB.Connection")ADOconnObj.Provider = "ADSDSOObject"ADOconnObj.Open "ADs Provider"'PDC FSMObstrADOQueryString = "<LDAP://"&Path&">;(&(objectClass=domainDNS)(fSMORoleOwner=*));adspath;subtree"Set RootDom = GetObject("LDAP://RootDSE")Set RSObj = ADOconnObj.Execute(bstrADOQueryString)Set FSMOobj = GetObject(RSObj.Fields(0).Value)Set CompNTDS = GetObject("LDAP://" & FSMOobj.fSMORoleOwner)Set Computer = GetObject(CompNTDS.Parent)WScript.Echo "The PDC FSMO is: " & Computer.dnsHostName'Rid FSMObstrADOQueryString = "<LDAP://"&Path&">;(&(objectClass=rIDManager)(fSMORoleOwner=*));adspath;subtree"Set RSObj = ADOconnObj.Execute(bstrADOQueryString)Set FSMOobj = GetObject(RSObj.Fields(0).Value)Set CompNTDS = GetObject("LDAP://" & FSMOobj.fSMORoleOwner)Set Computer = GetObject(CompNTDS.Parent)WScript.Echo "The RID FSMO is: " & Computer.dnsHostName'Infrastructure FSMObstrADOQueryString = "<LDAP://"&Path&">;(&(objectClass=infrastructureUpdate)(fSMORoleOwner=*));adspath;subtree"Set RSObj = ADOconnObj.Execute(bstrADOQueryString)Set FSMOobj = GetObject(RSObj.Fields(0).Value)Set CompNTDS = GetObject("LDAP://" & FSMOobj.fSMORoleOwner)Set Computer = GetObject(CompNTDS.Parent)WScript.Echo "The Infrastructure FSMO is: " & Computer.dnsHostName'Schema FSMObstrADOQueryString = "<LDAP://"&RootDom.Get("schemaNamingContext")&_ ">;(&(objectClass=dMD)(fSMORoleOwner=*));adspath;subtree"Set RSObj = ADOconnObj.Execute(bstrADOQueryString)Set FSMOobj = GetObject(RSObj.Fields(0).Value)Set CompNTDS = GetObject("LDAP://" & FSMOobj.fSMORoleOwner)Set Computer = GetObject(CompNTDS.Parent)WScript.Echo "The Schema FSMO is: " & Computer.dnsHostName'Domain Naming FSMObstrADOQueryString = "<LDAP://"&RootDom.Get("configurationNamingContext")&_ ">;(&(objectClass=crossRefContainer)(fSMORoleOwner=*));adspath;subtree"Set RSObj = ADOconnObj.Execute(bstrADOQueryString)Set FSMOobj = GetObject(RSObj.Fields(0).Value)Set CompNTDS = GetObject("LDAP://" & FSMOobj.fSMORoleOwner)Set Computer = GetObject(CompNTDS.Parent)WScript.Echo "The Domain Naming FSMO is: " & Computer.dnsHostName
netdom.exe is not built into the os. It has to be installed. Download Windows server 2003 support tools and install the tools on any dc, member server or xp client machine that belongs to the domain. Now you are ready to run c:\program files\support tools\netdom query fsmo