コード例 #1
0
        public static void GetData()
        {
            try
            {
                // get a domain context
                DirectoryContext context = new DirectoryContext(
                    DirectoryContextType.Domain);

                // alternative for testing a specific server's replication status.
                // this uses the GetDomainController context remarked below.
                // DirectoryContext context = new DirectoryContext(
                //                               DirectoryContextType.DirectoryServer,
                //                               "sea-dc-02.fabrikam.com");

                // bind to a domain controller in the domain. The context for this FindOne
                // method must be domain
                DomainController dc = DomainController.FindOne(context);

                // alternative for getting a DC to check its replication status.
                // DomainController dc = DomainController.GetDomainController(context);

                // retrieve replication cursor information for each replicated partition
                Console.WriteLine("\nReplication cursor data for each partition\n");
                foreach (string partition in dc.Partitions)
                {
                    Console.WriteLine("\tPartition {0}", partition);
                    foreach (ReplicationCursor cursor in dc.GetReplicationCursors(partition))
                    {
                        Console.WriteLine("\t\tSourceServer: {0}\n" +
                                          "\t\tLastSuccessfulSyncTime: {1}\n" +
                                          "\t\tSourceInvocationId: {2}\n" +
                                          "\t\t octet string format: {3}\n" +
                                          "\t\tusn: {4}\n",
                                          cursor.SourceServer,
                                          cursor.LastSuccessfulSyncTime,
                                          cursor.SourceInvocationId,
                                          BuildFilterOctetString(cursor.SourceInvocationId.ToByteArray()),
                                          cursor.UpToDatenessUsn
                                          );
                    }
                }

                // retrieve replication neighbor information
                Console.WriteLine("\nReplication neighbor data\n");
                foreach (string partition in dc.Partitions)
                {
                    Console.WriteLine("\tPartition: {0}", partition);
                    foreach (ReplicationNeighbor neighbor in
                             dc.GetReplicationNeighbors(partition))
                    {
                        Console.WriteLine("\t\tSourceServer: {0}\n" +
                                          "\t\tReplicationNeighborFlag: {1}\n" +
                                          "\t\tUsnAttributeFilter: {2}\n" +
                                          "\t\tLastSuccessfulSync: {3}\n",
                                          neighbor.SourceServer,
                                          neighbor.ReplicationNeighborOption,
                                          neighbor.UsnAttributeFilter,
                                          neighbor.LastSuccessfulSync);
                    }
                }

                // retrieve the inbound replication connections
                // other servers initiate replication to this server
                Console.WriteLine("\nInbound replication connection data\n");

                foreach (ReplicationConnection con in dc.InboundConnections)
                {
                    Console.WriteLine("\tReplication connection name (cn): {0}\n " +
                                      "\tSourceServer: {1}\n " +
                                      "\tDestinationServer: {2}\n" +
                                      "\tTransport type: {3}\n" +
                                      "\tConnection schedule owned by user: {4}\n",
                                      con.Name,
                                      con.SourceServer,
                                      con.DestinationServer,
                                      con.TransportType,
                                      con.ReplicationScheduleOwnedByUser
                                      );
                }

                // retrieve the outbound replication connections
                // this server initiates replication to the following servers
                Console.WriteLine("\nOutbound replication connection data\n");

                foreach (ReplicationConnection con in dc.OutboundConnections)
                {
                    Console.WriteLine("\tReplication connection (cn): {0}\n" +
                                      "\tSourceServer: {1}\n" +
                                      "\tDestinationServer: {2}\n" +
                                      "\tTransport type: {3}\n",
                                      con.Name,
                                      con.SourceServer,
                                      con.DestinationServer,
                                      con.TransportType
                                      );
                }

                // A simple approach using S.DS to get to the dn of the current domain
                DirectoryEntry de             = new DirectoryEntry();
                string         targetDomainDN = de.Properties["distinguishedName"].Value.ToString();

                // UPDATE THIS VALUE WITH A VALID RDN OF AN OBJECT IN YOUR DOMAIN.
                // If you want to evaluate the replication status of a child object
                // of an object that is a child of
                // the domain, then include it's path up to the domain level:
                // e.g., "cn=user1,ou=techwriters"
                string AdObjectRdn = "ou=techwriters";

                string objectPath = AdObjectRdn + "," + targetDomainDN;

                // retrieve the replication metadata information for a specific object
                Console.WriteLine("\nReplication metadata data for object path {0}\n", objectPath);

                ActiveDirectoryReplicationMetadata metadata = null;

                try
                {
                    metadata = dc.GetReplicationMetadata(objectPath);
                }
                catch (ArgumentException e)
                {
                    Console.WriteLine("{0}.\nPlease specify an existing " +
                                      "object for the ADObjectRdn variable",
                                      e.Message);
                    return;
                }

                // iterate through the attributes associated with this object
                foreach (string attribute in metadata.AttributeNames)
                {
                    Console.WriteLine("\tAttribute lDAPDisplayName: {0}\n", attribute);

                    // for each attribute, assign an AttributeMetadata object by
                    // passing the ActiveDirectoryReplicationMetadata object the
                    // lDapDisplayName of the attribute to inspect. The
                    // ActiveDirectoryReplicationMetadata object gets the attribute
                    // to inspect.
                    AttributeMetadata replicationData = metadata[attribute];

                    Console.WriteLine("\t\tOriginatingServer: {0}\n" +
                                      "\t\tOriginatingChangeUsn: {1}\n" +
                                      "\t\tLocalChangeUsn: {2}\n" +
                                      "\t\tLastOriginatingChangeTime: {3}\n",
                                      replicationData.OriginatingServer,
                                      replicationData.OriginatingChangeUsn,
                                      replicationData.LocalChangeUsn,
                                      replicationData.LastOriginatingChangeTime);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("\r\nUnexpected exception occured:\n{0}:{1}",
                                  e.GetType().Name, e.Message);
            }
        }
コード例 #2
0
        static void Main()
        {
            try
            {
                string targetDomainName = "fabrikam.com";

                string objectPath = "cn=users,dc=fabrikam,dc=com";

                // get to the domain controller
                DomainController dc = DomainController.FindOne(
                    new DirectoryContext(
                        DirectoryContextType.Domain,
                        targetDomainName));

                // to provide alternate credentials, use the below
                // DomainController dc = DomainController.FindOne(
                //                              new DirectoryContext(
                //                                      DirectoryContextType.Domain,
                //                                      targetDomainName,
                //                                      "alt-username",
                //                                      "alt-password"));

                // retrieve replication cursor information
                Console.WriteLine("\nGet replication cursor information" +
                                  " for each partition");
                foreach (string s in dc.Partitions)
                {
                    Console.WriteLine("\nPartition {0}", s);
                    foreach (ReplicationCursor cursor in dc.GetReplicationCursors(s))
                    {
                        Console.WriteLine("\tSourceServer is {0}, " +
                                          "SourceInvocationId is {1}, " +
                                          "LastSuccessfulSyncTime is {2}",
                                          cursor.SourceServer,
                                          cursor.SourceInvocationId,
                                          cursor.LastSuccessfulSyncTime);
                    }
                }

                // retrieve replication neighbor information
                Console.WriteLine("\n\nGet replication neighbor information");
                foreach (string s in dc.Partitions)
                {
                    Console.WriteLine("\nPartition {0}", s);
                    foreach (ReplicationNeighbor neighbor in
                             dc.GetReplicationNeighbors(s))
                    {
                        Console.WriteLine("\tSourceServer is {0}, " +
                                          "ReplicationNeighborFlag is {1}, " +
                                          "UsnAttributeFilter is {2}, " +
                                          "LastSuccessfulSync is {3}",
                                          neighbor.SourceServer,
                                          neighbor.ReplicationNeighborOption,
                                          neighbor.UsnAttributeFilter,
                                          neighbor.LastSuccessfulSync);
                    }
                }

                // retrieve the replication metadata information
                Console.WriteLine("\n\nGet replication metadata information");
                ActiveDirectoryReplicationMetadata metadata =
                    dc.GetReplicationMetadata(objectPath);
                foreach (object o in metadata.AttributeNames)
                {
                    Console.WriteLine("\nAttribute {0}", o);
                    AttributeMetadata attr = metadata[(string)o];
                    Console.WriteLine("\tOriginatingServer is {0}, " +
                                      "OriginatingChangeUsn is {1}, " +
                                      "LocalChangeUsn is {2}, " +
                                      "LastOriginatingChangeTime is {3}",
                                      attr.OriginatingServer,
                                      attr.OriginatingChangeUsn,
                                      attr.LocalChangeUsn,
                                      attr.LastOriginatingChangeTime);
                }

                // retrieve the inbound replication connections
                Console.WriteLine("\n\nGet inbound replication " +
                                  "connection information");
                foreach (ReplicationConnection con in dc.InboundConnections)
                {
                    Console.WriteLine("\tReplication connection \"{0}\", " +
                                      "SourceServer is {1}, " +
                                      "DestinationServer is {2}",
                                      con.Name,
                                      con.SourceServer,
                                      con.DestinationServer);
                }

                // retrieve the outbound replication connections
                Console.WriteLine("\n\nGet outbound replication " +
                                  "connection information");

                foreach (ReplicationConnection con in dc.OutboundConnections)
                {
                    Console.WriteLine("\tReplication connection \"{0}\", " +
                                      "SourceServer is {1}, " +
                                      "DestinationServer is {2}",
                                      con.Name,
                                      con.SourceServer,
                                      con.DestinationServer);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("\r\nUnexpected exception occured:\r\n\t" +
                                  e.GetType().Name + ":" + e.Message);
            }
        }