强制以编程方式复制单个Active Directory对象

时间:2011-04-06 04:07:12

标签: c# active-directory ldap

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

为了更清楚,我想复制这个

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

和整个分区一样

DC=company,DC=com

我试过DomainController.SyncReplicaFromAllServers Method,但我猜它用于分区。

4 个答案:

答案 0 :(得分:2)

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

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

但是,如果你能告诉你需要更具体的细节,那将会有所帮助。

答案 1 :(得分:1)

您可以使用“repadmin / replsingleobj”(http://technet.microsoft.com/en-us/library/cc742123.aspx

复制单个对象

答案 2 :(得分:0)

Theres无法在对象级别执行此操作,最佳解决方法是保存对象时尝试将其保存在所有域控制器上(如果需要)

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

答案 3 :(得分:0)

我编写此代码,因为我可以在两个DC之间进行Rep 但它的工作仅限于IIS池中的Admin Permisson 在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