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; }
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); } }
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; } } } } }
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)); }
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(); }