Microsoft KB Archive/246530: Difference between revisions
m (Text replacement - ">" to ">") |
m (Text replacement - """ to """) |
||
Line 165: | Line 165: | ||
==== Synchronize Domain Controllers ==== | ==== Synchronize Domain Controllers ==== | ||
This script triggers a synchronization on | This script triggers a synchronization on "server1," pulling any changes from "server2" that have been recorded for the configuration information (includes sites, subnets, and domain controller data): | ||
<pre class="codesample">Set DLL=CreateObject( | <pre class="codesample">Set DLL=CreateObject("IADsTools.DCFunctions") | ||
Result=DLL.ReplicaSync( | Result=DLL.ReplicaSync("server1","cn=configuration,dc=mydomain,dc=com","server2") | ||
if result=-1 Then | if result=-1 Then | ||
Wscript.Echo | Wscript.Echo "The error returned was: " + DLL.LastErrorText | ||
else | else | ||
Wscript.Echo | Wscript.Echo "The command completed successfully." | ||
end if | end if | ||
</pre> | </pre> | ||
Line 179: | Line 179: | ||
Dim NamingContext | Dim NamingContext | ||
TargetServer= | TargetServer="server1" | ||
SourceServer= | SourceServer="server2" | ||
NamingContext= | NamingContext="cn=configuration,dc=mydomain,dc=com" | ||
Set DLL=CreateObject( | Set DLL=CreateObject("IADsTools.DCFunctions") | ||
Result=DLL.ReplicaSync(Cstr(TargetServer),Cstr(NamingContext),Cstr(SourceServer)) | Result=DLL.ReplicaSync(Cstr(TargetServer),Cstr(NamingContext),Cstr(SourceServer)) | ||
if result=-1 Then | if result=-1 Then | ||
Wscript.Echo | Wscript.Echo "The error returned was: " + DLL.LastErrorText | ||
else | else | ||
Wscript.Echo | Wscript.Echo "The command completed successfully." | ||
end if | end if | ||
</pre> | </pre> | ||
==== Get the List of Global Catalog Servers in the Enterprise ==== | ==== Get the List of Global Catalog Servers in the Enterprise ==== | ||
This script uses | This script uses "server1" as the source of information and gets the list of global catalog servers in the enterprise from it: | ||
<pre class="codesample">Set DLL=CreateObject( | <pre class="codesample">Set DLL=CreateObject("IADsTools.DCFunctions") | ||
Result=DLL.GetGCList( | Result=DLL.GetGCList("server1") | ||
if result=-1 Then | if result=-1 Then | ||
Wscript.echo | Wscript.echo "The error returned was: " + DLL.LastErrorText | ||
else | else | ||
Wscript.echo | Wscript.echo "The number of Global Catalog servers returned is: " + cstr(result) | ||
wscript.echo | wscript.echo "----------------------------------------------------" | ||
for i=1 to Result | for i=1 to Result | ||
'print out the name of each GC server | 'print out the name of each GC server | ||
Line 210: | Line 210: | ||
This script contacts each domain controller in a domain and checks for any replication problems. This script combines functions that enumerate the list of domain controllers, enumerate the list of directory partitions on each of those domain controllers, and check the replication status of each directory partition for problems: | This script contacts each domain controller in a domain and checks for any replication problems. This script combines functions that enumerate the list of domain controllers, enumerate the list of directory partitions on each of those domain controllers, and check the replication status of each directory partition for problems: | ||
<pre class="codesample">Set DLL=CreateObject( | <pre class="codesample">Set DLL=CreateObject("IADsTools.DCFunctions") | ||
'read the list of domain controllers | 'read the list of domain controllers | ||
Result=DLL.DsGetDCList( | Result=DLL.DsGetDCList("server1","mydomain.com",1) | ||
if result=-1 Then | if result=-1 Then | ||
Wscript.echo | Wscript.echo "The error returned was: " + DLL.LastErrorText | ||
else | else | ||
Wscript.echo | Wscript.echo "The number of Domain Controllers returned is: " + cstr(result) | ||
wscript.echo | wscript.echo "--------------------------------------------------" | ||
for i=1 to Result | for i=1 to Result | ||
'for each domain controller, get the number of Directory Partitions (non-partial) it hosts | 'for each domain controller, get the number of Directory Partitions (non-partial) it hosts | ||
wscript.echo | wscript.echo "Checking domain controller: " + DLL.DCListEntryNetBiosName(i) | ||
PartitionResult=DLL.GetNamingContexts(DLL.DCListEntryNetBiosName(i)) | PartitionResult=DLL.GetNamingContexts(DLL.DCListEntryNetBiosName(i)) | ||
'if we couldn't reach the server, skip it | 'if we couldn't reach the server, skip it | ||
if PartitionResult=-1 then | if PartitionResult=-1 then | ||
wscript.echo | wscript.echo "Could not reach the server: " + DLL.DCListEntryNetBiosName(i) | ||
else | else | ||
wscript.echo | wscript.echo "Found " + CStr(PartitionResult) + " Directory Partitions (non-partial) on (" + DLL.DCListEntryNetBiosName(i) + ")." | ||
'query the status of each directory partition | 'query the status of each directory partition | ||
for j=1 to PartitionResult | for j=1 to PartitionResult | ||
Line 233: | Line 233: | ||
for k=1 to ReplResult | for k=1 to ReplResult | ||
if DLL.DirectPartnerFailReason(k) > 0 then | if DLL.DirectPartnerFailReason(k) > 0 then | ||
wscript.echo | wscript.echo "Failure detected replicating partition (" + DLL.NamingContextName(j) + ") from (" + DLL.DirectPartnerName(k) + ")." | ||
else | else | ||
'if you wanted to enable the following line, you could see the ones that are OK as well | 'if you wanted to enable the following line, you could see the ones that are OK as well | ||
'wscript.echo | 'wscript.echo "OK --- Replicating partition (" + DLL.NamingContextName(j) + ") from (" + DLL.DirectPartnerName(k) + ")." | ||
end if | end if | ||
next | next |
Latest revision as of 12:50, 21 July 2020
Article ID: 246530
Article Last Modified on 3/1/2007
APPLIES TO
- Microsoft Windows 2000 Server
- Microsoft Windows 2000 Advanced Server
- Microsoft Windows 2000 Professional Edition
- Microsoft Windows 2000 Datacenter Server
This article was previously published under Q246530
SUMMARY
Iadstools.dll is a dynamic-link library (DLL) that you can use to write Microsoft Visual Basic scripts (or create your own programs) to extract specific types of data from Active Directory and to take advantage of new application programming interface (API) calls that are available in Windows 2000. For example, Iadstools.dll includes functions that make it easy to script replication between domain controllers with just a few lines of VBScript code.
Iadstools.dll is installed with the Windows 2000 Support Tools package, which you can install from the Support\Tools folder on the Windows 2000 Server or Professional CD-ROM. For a complete list of all the functions available in Iadstools.dll, see the Iadstools.doc file that is installed with the Windows 2000 Support Tools package.
MORE INFORMATION
Description of the Functions
DsGetDcName: The new Windows 2000 API that allows finding Windows NT 4.0-based and Windows 2000-based domain controllers with varying requirements and much more flexibility.
ReplicaSync: Initiates replication between two domain controllers for a given directory partition.
ReplicaSyncAll: Initiates replication to bring a specific domain controller up to date in respect to all other domain controllers or to push changes from one domain controller to all others.
TriggerKCC: Triggers the Knowledge Consistency Checker (KCC) on the specified server to check the current topology to ensure that it has accounted for any recent changes.
GetGCList: Generates a list of the global catalog servers in the enterprise.
GetDirectPartnersEx: Returns the name and status of the direct replication partners of the specified domain controller.
GetReplicationUSNStateEx: Returns the name and update sequence number (USN) of direct and transitive replication partners.
GetChangeNotifications: Returns the domain controllers that the specified server notifies when changes have occurred that need to be replicated.
GetRidPoolFSMO: Queries the server specified for what it believes is the RID Pool FSMO owner.
GetDomainNamingFSMO: Queries the server specified for what it believes is the Domain Tree Management FSMO owner.
GetSchemaFSMO: Queries the server specified for what it believes is the Schema FSMO owner.
GetPDCFSMO: Queries the server specified for what it believes is the PDC FSMO owner.
GetInfrastructureFSMO: Queries the server specified for what it believes is the Infrastructure FSMO owner.
GetHighestCommittedUSN: Given a domain controller, it receives the highest USN committed for the server.
GetGPOs: Enumerates the Group Policy objects (GPOs) for a given domain controller.
GetGPOVersion: Determines the version of a specific GPO in Active Directory on a particular domain controller.
GetGPOSysVolVersion: Determines the version of a specific GPO in SYSVOL on a particular domain controller.
GetConfigurationNamingContext: Determines the name of the Configuration directory partition for a given domain controller.
GetDefaultNamingContext: Determines the name of the default directory partition (domain) for a given domain controller.
GetMetaData: Returns the attribute metadata for a specific object in Active Directory.
GetDSAConnections: Generates a list of NTDS Connection objects and their properties for a given server.
GetSiteList: Generates a list of the sites given a server from which to source the data.
GetSiteLinks: Generates a list of the site links given a server from which to source the data.
GetSiteLinkBridges: Generates a list of the Site Link Bridges given a server from which to source the data.
GetSiteLinkBridgeProperties: Queries Active Directory for the configuration of a given Site Link Bridge.
GetSiteLinkProperties: Queries Active Directory for the configuration of a given Site Link.
GetSiteProperties: Queries Active Directory for the configuration of a given site.
GetInterSiteTransports: Queries Active Directory for the configuration of IP and SMTP Active Directory replication transports.
GetSiteForServer: Resolves the site of which the specified domain controller is a member.
GetBridgeHeadsInSite: Enumerates the domain controllers acting as bridgeheads in a given site.
GetInterSiteTopologyGenerator: Given a site, gets the single-part name (from the distinguished name) of the computer that owns the role of creating/maintaining the inter-site connection objects for all servers in a site.
DsGetSiteName: The new Windows 2000 API for finding out the site of the computer queried for.
GetSubnets: Queries Active Directory for an enumeration and configuration of subnets.
GetServersInSite: Enumerates the domain controllers in a given site.
GetTrustRelationships: Returns the configuration of the trust relationships for the domain in which the domain controller connected to resides.
GetDSAProperties: Queries Active Directory for the configuration of a particular domain controller's NTDS settings.
DsGetDcList: Gets the list of domain controllers and associated properties for a given domain.
GetIPConfiguration: Determines the IP configuration (including IP address, DNS, etc.) of the server specified.
GetServersInSiteWithWritableNC: Enumerates the domain controllers in a given site with a given writeable directory partition.
GetNamingContexts: Reads the RootDSE of a specified domain controller to determine the directory partitions that it maintains.
GetWritableNCsForServer: Reads the RootDSE of a specified domain controller to determine the directory partitions that it maintains.
GetPartialNamingContexts: Reads the RootDSE of a specified domain controller to determine the partial copy directory partitions that it maintains.
ConvertErrorMsg: Converts an error number to message text.
GetActiveDirectoryProperties: Queries Active Directory for general configuration parameters.
GetRegistryData: Retrieves a registry value from a remote or local computer.
GetServerFromGuid: Resolves a server name from a specified Globally Unique ID (GUID).
GetGuidForServer: Queries Active Directory for the GUID (database GUID) of a given server.
GetObjectGuidForServer: Queries Active Directory for the object GUID of a given server.
GetObjectFromGuid: Resolves an object in Active Directory from a specified object GUID.
TranslateDNToNT4: Converts the distinguished name of a user account (cn=administrator,cn=users,...) to a Windows NT 4.0-style domain\user format (achieved by ADSI).
TranslateNT4ToDN: Converts Windows NT 4.0-style credentials (domain\user) to a distinguished name by looking up the account and reading the distinguished name that identifies that object (achieved by ADSI).
GetPerformanceData: Reads the current value of the counters loaded in InitPerformanceData.
Examples
Synchronize Domain Controllers
This script triggers a synchronization on "server1," pulling any changes from "server2" that have been recorded for the configuration information (includes sites, subnets, and domain controller data):
Set DLL=CreateObject("IADsTools.DCFunctions") Result=DLL.ReplicaSync("server1","cn=configuration,dc=mydomain,dc=com","server2") if result=-1 Then Wscript.Echo "The error returned was: " + DLL.LastErrorText else Wscript.Echo "The command completed successfully." end if
If you use variables in your script, it looks slightly different:
Dim TargetServer Dim SourceServer Dim NamingContext TargetServer="server1" SourceServer="server2" NamingContext="cn=configuration,dc=mydomain,dc=com" Set DLL=CreateObject("IADsTools.DCFunctions") Result=DLL.ReplicaSync(Cstr(TargetServer),Cstr(NamingContext),Cstr(SourceServer)) if result=-1 Then Wscript.Echo "The error returned was: " + DLL.LastErrorText else Wscript.Echo "The command completed successfully." end if
Get the List of Global Catalog Servers in the Enterprise
This script uses "server1" as the source of information and gets the list of global catalog servers in the enterprise from it:
Set DLL=CreateObject("IADsTools.DCFunctions") Result=DLL.GetGCList("server1") if result=-1 Then Wscript.echo "The error returned was: " + DLL.LastErrorText else Wscript.echo "The number of Global Catalog servers returned is: " + cstr(result) wscript.echo "----------------------------------------------------" for i=1 to Result 'print out the name of each GC server wscript.echo DLL.GCName(i) next end if
Enumerate Domain Controllers and Check for Replication Problems
This script contacts each domain controller in a domain and checks for any replication problems. This script combines functions that enumerate the list of domain controllers, enumerate the list of directory partitions on each of those domain controllers, and check the replication status of each directory partition for problems:
Set DLL=CreateObject("IADsTools.DCFunctions") 'read the list of domain controllers Result=DLL.DsGetDCList("server1","mydomain.com",1) if result=-1 Then Wscript.echo "The error returned was: " + DLL.LastErrorText else Wscript.echo "The number of Domain Controllers returned is: " + cstr(result) wscript.echo "--------------------------------------------------" for i=1 to Result 'for each domain controller, get the number of Directory Partitions (non-partial) it hosts wscript.echo "Checking domain controller: " + DLL.DCListEntryNetBiosName(i) PartitionResult=DLL.GetNamingContexts(DLL.DCListEntryNetBiosName(i)) 'if we couldn't reach the server, skip it if PartitionResult=-1 then wscript.echo "Could not reach the server: " + DLL.DCListEntryNetBiosName(i) else wscript.echo "Found " + CStr(PartitionResult) + " Directory Partitions (non-partial) on (" + DLL.DCListEntryNetBiosName(i) + ")." 'query the status of each directory partition for j=1 to PartitionResult ReplResult=DLL.GetDirectPartnersEx(DLL.DCListEntryNetBiosName(i),DLL.NamingContextName(j), 0) 'see if there's a failure code other than zero for any of the replication partners for k=1 to ReplResult if DLL.DirectPartnerFailReason(k) > 0 then wscript.echo "Failure detected replicating partition (" + DLL.NamingContextName(j) + ") from (" + DLL.DirectPartnerName(k) + ")." else 'if you wanted to enable the following line, you could see the ones that are OK as well 'wscript.echo "OK --- Replicating partition (" + DLL.NamingContextName(j) + ") from (" + DLL.DirectPartnerName(k) + ")." end if next next end if next end if
Keywords: kbinfo KB246530