【问题标题】:Add enabled Computer to Active Directory OU将启用的计算机添加到 Active Directory OU
【发布时间】:2014-01-29 10:28:52
【问题描述】:

我正在尝试以编程方式将计算机添加到我公司的 Active Directory。
我在网上搜索了很久,但我找不到解决方案。

我的代码:

DirectoryEntry dirEntry = new DirectoryEntry("LDAP://OU=ou2example,OU=ou1example,DC=site,DC=company,DC=com");
dirEntry.Username = "username";
dirEntry.Password = "password";
DirectoryEntry newComputer = dirEntry.Children.Add("CN=" + ComputerName, "computer");
newComputer.CommitChanges();

我的问题:

计算机已添加到 Active Directory。但它被标记为禁用。

我尝试通过以下方式启用计算机:

newComputer.Properties["userAccountControl"].Value = 0x200;

但我得到一个 DirectoryServicesCOMException --> 服务器无法完成请求。

newComputer.Properties["Enabled"].Value = true;

但我得到一个 DirectoryServicesCOMException --> 请求的操作不满足至少一个针对此对象类条件的约束。

请注意,例外情况是从德语翻译成英语的!

感谢您的帮助!

【问题讨论】:

    标签: c# active-directory windows-server-2003


    【解决方案1】:

    我认为有两件事可能是错的,但我已经很久没有做这样的事情了,所以我可能错了......

    首先,你什么时候设置userAccountControl标志?我似乎记得你应该在 CommitChanges 之后为新条目执行此操作。像这样:

    DirectoryEntry newComputer =
        dirEntry.Children.Add("CN=" + ComputerName, "computer");
    newComputer.CommitChanges();
    newComputer.Properties["userAccountControl"].Value = 0x200;
    newComputer.CommitChanges();
    

    其次,你能不能尝试设置UF_WORKSTATION_TRUST_ACCOUNT标志(0x1000)而不是UF_NORMAL_ACCOUNT0x200)。

    你还能检查条目的sAMAccountType是否为SAM_MACHINE_ACCOUNT0x30000001)。我认为这应该是自动的,但检查一下也无妨。

    【讨论】:

    • 我在提交更改之前设置了 userAccountControl 标志。当我之后设置它们并且当我使用 0x1000 时,我没有得到异常但计算机仍然被禁用:(
    • 没关系!它现在正在工作......您先生是个天才!
    • 新建对象的 UserAccountControl 的值有一定的限制。我在使用空密码创建新用户帐户时遇到了类似的问题。即,如果未设置“不需要密码”标志且未提供密码,则服务器拒绝创建用户。我认为您遇到了同样的问题。尝试手动创建一个计算机帐户,检查该值并将该值与 0x200 进行二进制或运算,以确保您没有做任何潜在危险的事情。
    【解决方案2】:

    将近一年后,也明智了一年,我确切地知道我做错了什么。

    所以我想和你分享正确的方法,即使我已经选择了一个答案。

    代码

    DirectoryEntry dirEntry = new DirectoryEntry(“LDAP Path”);
    DirectoryEntry newComputer = dirEntry.Children.Add(“CN=Hostname”, “computer”);
    newComputer.Properties[“sAMAccountName”].Value = Hostname + “$”;
    newComputer.Properties[“UserAccountControl”].Value = 0x1020;
    newComputer.CommitChanges();
    

    说明

    sAMAccountName

    找到解释here

    计算机对象的 sAMAccountName 属性是计算机的 NetBIOS 名称,后面附加一个美元符号“$”。除了将对象标记为计算机(具有类用户)之外,它还有助于确保唯一性。 sAMAccountName 值在域中必须是唯一的。注意,计算机对象的通用名称(cn 属性的值)没有尾随的“$”,但 cn 也不能唯一标识 AD 中的对象。公用名只需要在 OU 或容器中是唯一的。

    机器帐户的 sAMAccountName 属性中总是有一个尾随的美元符号“$”;这会导致它们不会被某些 API 枚举,因此不会显示在某些用户界面中,在这些用户界面中,人们只会看到“用户”帐户。

    UserAccountControl

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      相关资源
      最近更新 更多