【问题标题】:C#, why I can't add domain user into local group?C#,为什么我不能将域用户添加到本地组?
【发布时间】:2026-01-22 04:45:02
【问题描述】:

为什么这段代码不起作用?我想要做的是将域用户添加到本地组中。

DirectorySearcher srch = new DirectorySearcher(new DirectoryEntry("LDAP://" + "AD1.test.it/DC=test,DC=it"));
srch.Filter = "(&(objectClass=user)(sAMAccountName=testUser))";            
SearchResultCollection results = srch.FindAll();
DirectoryEntry de = new DirectoryEntry(results[0].Path);

DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
DirectoryEntry dComUsersGrp = localMachine.Children.Find("Distributed COM Users", "group");
dComUsersGrp.Invoke("Add", new object[] { de.Path.ToString() }); 

我收到此错误:“调用的目标已引发异常。”

类似的代码用于将本地用户添加到本地组中。

DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
DirectoryEntry de = localMachine.Children.Find("testUser", "user");

DirectoryEntry dComUsersGrp = localMachine.Children.Find("Distributed COM Users", "group");
dComUsersGrp.Invoke("Add", new object[] { de.Path.ToString() });

非常感谢您的帮助。

【问题讨论】:

  • 有内部异常吗?它说什么?
  • 是的,存在内部异常。 “传递了一个无效的目录路径名”
  • 我相信你不能将带有 WinNT:// 前缀的东西添加到 LDAP:// 树中。如果要将其添加到 LDAP 域中,则需要找到一种方法来使用 LDAP 路径来表达该组
  • 我不想将域用户(LDAP 树)添加到本地组(WinNT 树)中。所以我需要通过 LDAP 访问本地组?我该怎么做?

标签: c# active-directory dns


【解决方案1】:
string userPath = string.Format("WinNT://{0}/{1},user", domain, user);
string groupPath = string.Format("WinNT://{0}/{1},group", Environment.MachineName, group);
using (DirectoryEntry group = new DirectoryEntry(groupPath))
{
    group.Invoke("Add", userPath);
    group.CommitChanges();
}

您需要使用 WinNT://ADSI 命名空间。

【讨论】:

    【解决方案2】:

    您通常必须指定登录凭据才能访问该目录。比如:

    String domainAndUsername = domain + @"\" + username;
    DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);
    

    【讨论】: