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