2011-04-06 67 views
3

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

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

我得到这个错误:“异常已被调用的目标抛出。”

Simillar代码用于将本地用户添加到本地组。

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

非常感谢您的帮助。

+1

是否存在内部异常?它说什么? – 2011-04-06 22:08:07

+1

是的,它是内在的例外。 “传递了一个无效的目录路径名” – Primoz 2011-04-06 22:26:38

+0

我相信你不能在'LDAP://'树中添加一个带有'WinNT://'前缀的东西。如果您想将其添加到LDAP域中,您需要找到一种方法来使用LDAP路径来表示该组。 – 2011-04-07 05:08:38

回答

2
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命名空间。

1

您通常必须指定登录凭据才能访问该目录。喜欢的东西:

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

我有相同的错误有或没有凭据。 – Primoz 2011-04-06 22:27:17

相关问题