Find replica servers (Perl)

This code can be found in Chapter 18 of Active Directory Cookbook, 2nd edition

Purchase XP Cookbook or Networking Recipes for only $25 plus shipping! While supplies last.

Find out how to download all of the Perl code from this site.

# This Perl code displays the DN of each domain controller's 
# nTDSDSA $object that is a replica server for the
# specified app partition

# ---------------------------------------------------------------
# Adapted from VBScript code contained in the book:
#      "Active Directory Cookbook" by Robbie Allen
# ISBN: 0-596-00466-4
# ---------------------------------------------------------------

# ------ SCRIPT CONFIGURATION ------
# Fully qualified DNS name of app partition 
my $strAppPart = "<AppPartitionFQDN>";   # e.g. apps.rallencorp.com
# ------ END CONFIGURATION ---------
use Win32::OLE 'in';
$Win32::OLE::Warn = 3;
my $objRootDSE = Win32::OLE->GetObject("LDAP://RootDSE");
my $strBase    =  "<LDAP://cn=Partitions," .
                  $objRootDSE->Get("ConfigurationNamingContext") . ">;";
my $strFilter  = "(&(objectcategory=crossRef)(dnsRoot=" . $strAppPart . "));";
my $strAttrs   = "msDS-NC-Replica-Locations;";
my $strScope   = "onelevel";
my $objConn = Win32::OLE->CreateObject("ADODB.Connection");
$objConn->{Provider} = "ADsDSOObject";
$objConn->Open;
my $objRS = $objConn->Execute($strBase . $strFilter . $strAttrs . $strScope);
if ($objRS->RecordCount != 1) {
   print "Did not find a match for application partition $strAppPart\n";
   exit;
}
else {
   $objRS->MoveLast;
   if ($objRS->Fields("msDS-NC-Replica-Locations")->Properties->Count > 0) {
      print "There are no replica servers for app partition $strAppPart\n";
   }
   else {
      print "Replica servers for app partition $strAppPart:\n";
      foreach my $strNTDS (in $objRS->Fields("msDS-NC-Replica-Locations")->Value) {
         print " $strNTDS\n";
      }
   }
}

This code has been viewed 2093 times.

New from the creators of TechTasks.com: StatSheet.com