2011-04-06 66 views
3

有谁知道如何以编程方式强制复制单个Active Directory对象?强制以编程方式复制单个Active Directory对象

为了更清楚我想复制这个

CN=Sample User,OU=Sample OU,DC=company,DC=com 

和整个分区这样

DC=company,DC=com 

我试图DomainController.SyncReplicaFromAllServers Method,但我想它的使用分区。

回答

0

世界上没有办法做到这一点对一个对象的水平,最好的解决方法是,当你保存你的对象尝试将其保存在所有域contollers(如果需要)

即你有域控制器1,域控制器2 ,域控制器3完全保存,而不是等待它复制。

+0

对于此场景来说,这将是一个很好的解决方法 – Raymund 2011-04-26 20:44:25

+2

oops! !这会在ObjectGUID中引入冲突,并且这些条目永远不会同步。对于每个对象,都会有一个objectGUID在创建期间生成。即使是DN改变GUID也不会改变。这意味着你所有的DC对于同一个条目都会有不同的GUID,当他们尝试同步GUID时会发生冲突。大多数情况下,ldap服务器会从同步中删除此特定条目。所以下一次当您更新“ldapmodify -h domain.com ...”时,只要该服务器将被更新。当你做ldapsearch时,你会得到意想不到的结果 – kalyan 2011-04-27 10:59:53

+0

@kalyan - 你不觉得AD将足够聪明,能够根据上次更新的时间戳来解析复制吗? – Raymund 2011-04-27 20:34:47

2

直接的答案是否定的,你不能说ldap服务器只复制一个对象。复制总是适用于分区/命名上下文。

Active Directory有一个全局编录,可以使用。有一堆属性标记为PAS属性(部分属性集)。从每个域控制器,每个对象的PAS属性将被KCC立即同步到所有GC服务器。您可以在microsft document中阅读更多关于此的信息。您可以在GC端口(3268)上执行ldap搜索以快速查找对象属性。

但是,如果你可以告诉你需要更多具体的细节,这将有助于。

+0

感谢您的回复。但有没有办法当我保存一个对象让我们说一个用户我可以选择将其保存在所有域控制器。因为如果有6个域控制器,我必须等待一段时间才能复制它。 – Raymund 2011-04-22 05:01:12

+0

我知道eDirectory中有一个选项。使用ndstrace我可以立即触发同步(也可以在命令行中运行,以便将其保存在脚本中)。但是我不知道AD – kalyan 2011-04-22 14:34:26

+0

@Raymund:您可以为用户运行所有创建操作,然后仅为其所在的分区启动复制同步。 – 2012-11-14 13:53:59

0

我写这个代码我可以在两个DC 但其仅具有管理员在未经许可从IIS池 在VS2015的工作之间做出众议员RUS为管理 在IIS中必须更改应用程序池标识:

public static SecureString sSPasswordFianl; 
public static void Securepass() 
{ 
    string sPassword = "yourpassword"; 
    SecureString sSPassword = new SecureString(); 
    foreach (char X in sPassword) 
     sSPassword.AppendChar(X); 

    sSPasswordFianl = sSPassword; 
} 

public static string RepTXADp01() 
{ 
    try 
    { 
     Process Replactions = new Process(); 
     ProcessStartInfo procInfo = new ProcessStartInfo(); 
     procInfo.UseShellExecute = false; 
     procInfo.FileName = HttpContext.Current.Server.MapPath("~/Rep.bat"); 
     procInfo.WorkingDirectory = @""; //The working DIR. 
     Securepass(); 
     procInfo.Verb = "runasuser"; 
     procInfo.Domain = "yourDomian.de"; 
     procInfo.UserName = "Username"; 
     procInfo.Password = sSPasswordFianl; 
     procInfo.CreateNoWindow = true; 
     Process.Start(procInfo); //Start that process. 
     string output; 
     return (output="OK"); 
    } 
    catch (Exception ex) 
    { 
     return (ex.Message.ToString()); 
    } 
} 

Reb.bat:

repadmin /replicate server1 Server2 DC=yourdomian ,DC=com 
相关问题