public OrganizationData(string name, DirectoryObjectCollection orgUnit, DirectoryObjectCollection configUnit, string rootOrgName, string sourceFqdn, string sourceADSite)
 {
     this.Name = name;
     this.OrganizationalUnit = orgUnit;
     this.ConfigurationUnit  = configUnit;
     this.RootOrgName        = rootOrgName;
     this.SourceFqdn         = sourceFqdn;
     this.SourceADSite       = sourceADSite;
 }
Beispiel #2
0
        public static void Import(DirectoryBindingInfo directoryInfo, DirectoryObjectCollection exportedItems, OrganizationConfigurationTree tree, string sourcedomain, string targetdomain, string sourceOrg, string targetOrg, string sourceSiteName, string targetSiteName)
        {
            string[] array = sourcedomain.Split(new char[]
            {
                '.'
            });
            StringBuilder stringBuilder = new StringBuilder();

            for (int i = 0; i < array.Length; i++)
            {
                stringBuilder.Append("DC=");
                stringBuilder.Append(array[i]);
                if (i != array.Length - 1)
                {
                    stringBuilder.Append(',');
                }
            }
            array = targetdomain.Split(new char[]
            {
                '.'
            });
            StringBuilder stringBuilder2 = new StringBuilder();

            for (int j = 0; j < array.Length; j++)
            {
                stringBuilder2.Append("DC=");
                stringBuilder2.Append(array[j]);
                if (j != array.Length - 1)
                {
                    stringBuilder2.Append(',');
                }
            }
            string text     = stringBuilder.ToString();
            string text2    = stringBuilder2.ToString();
            string oldValue = "CN=" + sourceOrg + ",CN=Microsoft Exchange,CN=Services,CN=Configuration," + text;
            string newValue = "CN=" + targetOrg + ",CN=Microsoft Exchange,CN=Services,CN=Configuration," + text2;

            if (string.Compare(sourceOrg, targetOrg) != 0)
            {
                tree.Replace(null, oldValue, newValue);
            }
            string text3 = "CN=" + sourceSiteName + ",CN=Sites,CN=Configuration," + text;
            string text4 = "CN=" + targetSiteName + ",CN=Sites,CN=Configuration," + text2;

            if (string.Compare(text3, text4) != 0)
            {
                tree.Replace(null, text3, text4);
            }
            tree.Replace(null, text, text2);
            tree.Replace(null, sourcedomain, targetdomain);
            tree.Import(null, directoryInfo);
            tree.UpdateDelayedProperties(null, directoryInfo);
        }
        public OrganizationConfigurationTree(DirectoryObjectCollection data)
        {
            if (data == null || data.Count == 0)
            {
                throw new ArgumentNullException("data");
            }
            ADObjectId adobjectId = new ADObjectId(data.ElementAt(0).Properties["distinguishedname"][0].ToString());

            this.Root = new Node(adobjectId.AncestorDN(adobjectId.Depth).ToDNString());
            foreach (DirectoryObject adObject in data)
            {
                this.AddLeaf(this.Root, adObject);
            }
        }
Beispiel #4
0
        public static void UpdateDirectoryObjectProperties(DirectoryObjectCollection exportedItems, DirectoryBindingInfo targetDirectoryBindingInfo)
        {
            DirectoryObjectCollection directoryObjectCollection;

            using (SearchResultCollection schema = OrganizationMigrationManager.GetSchema(null, "(|(objectClass=attributeSchema)(objectClass=classSchema))", targetDirectoryBindingInfo))
            {
                directoryObjectCollection = new DirectoryObjectCollection("Schema", schema);
            }
            foreach (DirectoryObject directoryObject in exportedItems)
            {
                using (ActiveDirectorySchemaClass activeDirectorySchemaClass = ActiveDirectorySchemaClass.FindByName(targetDirectoryBindingInfo.GetDirectoryContext(DirectoryContextType.Forest), directoryObject.Properties["objectclass"][directoryObject.Properties["objectclass"].Values.Count - 1].ToString()))
                {
                    foreach (object obj in activeDirectorySchemaClass.MandatoryProperties)
                    {
                        ActiveDirectorySchemaProperty activeDirectorySchemaProperty = (ActiveDirectorySchemaProperty)obj;
                        if (directoryObject.Properties.Contains(activeDirectorySchemaProperty.Name))
                        {
                            directoryObject.Properties[activeDirectorySchemaProperty.Name].IsRequired = true;
                        }
                    }
                    foreach (object obj2 in activeDirectorySchemaClass.GetAllProperties())
                    {
                        ActiveDirectorySchemaProperty activeDirectorySchemaProperty2 = (ActiveDirectorySchemaProperty)obj2;
                        if (directoryObject.Properties.Contains(activeDirectorySchemaProperty2.Name))
                        {
                            directoryObject.Properties[activeDirectorySchemaProperty2.Name].Syntax = activeDirectorySchemaProperty2.Syntax;
                        }
                    }
                }
                foreach (DirectoryProperty directoryProperty in directoryObject.Properties)
                {
                    DirectoryObject directoryObjectByLdapDisplayName = directoryObjectCollection.GetDirectoryObjectByLdapDisplayName(directoryProperty.Name);
                    if (directoryObjectByLdapDisplayName != null)
                    {
                        if (directoryObjectByLdapDisplayName.Properties.Contains("linkID") && directoryObjectByLdapDisplayName.Properties["linkID"].Values != null && int.Parse(directoryObjectByLdapDisplayName.Properties["linkID"][0].ToString()) % 2 != 0)
                        {
                            directoryProperty.IsBackLink = true;
                        }
                        if (directoryObjectByLdapDisplayName.Properties.Contains("attributeSyntax") && directoryObjectByLdapDisplayName.Properties["attributeSyntax"].Values != null && directoryObjectByLdapDisplayName.Properties["attributeSyntax"][0].ToString().CompareTo("2.5.5.1") == 0)
                        {
                            directoryProperty.IsLink = true;
                        }
                        if (directoryObjectByLdapDisplayName.Properties.Contains("systemOnly") && directoryObjectByLdapDisplayName.Properties["systemOnly"].Values != null && directoryObjectByLdapDisplayName.Properties["systemOnly"][0].ToString().ToLower() == "true")
                        {
                            directoryProperty.IsSystemOnly = true;
                        }
                    }
                }
            }
        }
Beispiel #5
0
 public static OrganizationConfigurationTree CalculateImportOrder(DirectoryObjectCollection exportedItems)
 {
     new List <string>();
     foreach (DirectoryObject directoryObject in exportedItems)
     {
         foreach (DirectoryProperty directoryProperty in directoryObject.Properties)
         {
             if (directoryProperty.IsLink && !directoryProperty.IsBackLink && !directoryProperty.IsRequired)
             {
                 directoryObject.DelayedProperties.Add(directoryProperty);
             }
         }
     }
     return(new OrganizationConfigurationTree(exportedItems));
 }
Beispiel #6
0
        protected override void InternalProcessRecord()
        {
            if (this.Identity == null)
            {
                throw new ArgumentNullException("Identity");
            }
            TaskLogger.LogEnter();
            LocalizedString?localizedString;
            IEnumerable <ExchangeConfigurationUnit> dataObjects = base.GetDataObjects <ExchangeConfigurationUnit>(this.Identity, base.DataSession, this.RootId, base.OptionalIdentityData, out localizedString);
            OrganizationId organizationId = null;

            using (IEnumerator <ExchangeConfigurationUnit> enumerator = dataObjects.GetEnumerator())
            {
                if (enumerator.MoveNext())
                {
                    ExchangeConfigurationUnit exchangeConfigurationUnit = enumerator.Current;
                    organizationId = exchangeConfigurationUnit.OrganizationId;
                    string originatingServer = exchangeConfigurationUnit.OriginatingServer;
                }
            }
            if (!base.HasErrors && organizationId == null)
            {
                base.WriteError(new ManagementObjectNotFoundException(localizedString ?? base.GetErrorMessageObjectNotFound(this.Identity.ToString(), typeof(ExchangeConfigurationUnit).ToString(), (base.DataSession != null) ? base.DataSession.Source : null)), (ErrorCategory)1003, null);
            }
            this.directoryInfo = new DirectoryBindingInfo();
            string name = organizationId.ConfigurationUnit.ToString();
            string distinguishedName = organizationId.OrganizationalUnit.DistinguishedName;
            DirectoryObjectCollection orgUnit;

            using (SearchResultCollection subtree = this.GetSubtree(distinguishedName))
            {
                orgUnit = new DirectoryObjectCollection(distinguishedName, subtree);
            }
            string     text       = organizationId.ConfigurationUnit.DistinguishedName;
            ADObjectId adobjectId = new ADObjectId(text);

            text = adobjectId.AncestorDN(1).ToDNString();
            DirectoryObjectCollection configUnit;

            using (SearchResultCollection subtree2 = this.GetSubtree(text))
            {
                configUnit = new DirectoryObjectCollection(text, subtree2);
            }
            this.WriteResult(new OrganizationData(name, orgUnit, configUnit, base.RootOrgContainerId.ToString(), ADSession.GetDomainNamingContextForLocalForest().ToString(), this.site.Name));
            TaskLogger.LogExit();
        }
        protected override void InternalProcessRecord()
        {
            if (this.Data == null)
            {
                throw new ArgumentNullException("Data");
            }
            TaskLogger.LogEnter();
            this.directoryInfo = new DirectoryBindingInfo((NetworkCredential)this.Credential);
            DirectoryObjectCollection organizationalUnit = this.Data.OrganizationalUnit;

            organizationalUnit.AddRange(this.Data.ConfigurationUnit);
            OrganizationConfigurationTree organizationConfigurationTree = OrganizationMigrationManager.CalculateImportOrder(organizationalUnit);

            organizationConfigurationTree.WriteVerboseDelegate = new Task.TaskVerboseLoggingDelegate(base.WriteVerbose);
            organizationConfigurationTree.WriteErrorDelegate   = new Task.TaskErrorLoggingDelegate(base.WriteError);
            organizationConfigurationTree.WriteWarningDelegate = new Task.TaskWarningLoggingDelegate(this.WriteWarning);
            OrganizationMigrationManager.UpdateDirectoryObjectProperties(organizationalUnit, this.directoryInfo);
            OrganizationMigrationManager.Import(this.directoryInfo, organizationalUnit, organizationConfigurationTree, this.Data.SourceFqdn, this.directoryInfo.Credential.Domain, this.Data.RootOrgName, base.RootOrgContainerId.ToString(), this.Data.SourceADSite, this.site.Name);
            TaskLogger.LogExit();
        }