我一直在尝试使用C#阅读并设置 DirectoryEumber 对象的 departmentNumber 属性,但我总是遇到使用ADSI Edit的问题我无法看到此条目中的任何内容都已更改。
到目前为止,我尝试过的方法包括:
directoryEntry.Properties["departmentNumber"].Value = new object[]{ "SomeContent" };
和
directoryEntry.InvokeSet("departmentNumber", new object[]{ "SomeContent" };
和
directoryEntry.Invoke("PutEx", new object[]{ 2, "departmentNumber", new object[]{"SomeContent"}});
和
directoryEntry.Invoke("Put", new object[]{ "departmentNumber", "SomeContent" });
更新 所有上述内容后跟 directoryEntry.CommitChanges(); 。
无论我尝试什么,我都会(使用上面的一些例子)获得结果,能够使用相应的代码再次读取值,但每当我使用ADSI-Editor并查看属性时用户,我看不到departmentNumber包含任何数据。
如果我使用ADSI-Editor将属性设置为某个值,我也无法通过C#查询该特定值,但我可以做的是使用一个非常简单的VB脚本,如下所示:
Set objUser = GetObject("LDAP://CN=........")
objUser.GetInfo
objUser.PutEx 2, "departmentNumber", Array("SomeContent")
这确实改变了我在ADSI-Editor中可以看到的属性的值,但是再一次,使用C#我无法读取它。
这里有什么问题,为什么它看起来好像有两个不同的“departmentNumber”属性?尽管试图找到有同样问题的人,但我没有提出任何答案,甚至没有指出正确的方向,所以任何帮助都非常感谢。如果您需要更多信息,请询问。
答案 0 :(得分:2)
你忘了提交更改。 ADSI必须使用它。以下是用户管理和修改的示例:
static void Main(string[] args)
{
/* Connection to Active Directory
*/
DirectoryEntry deBase = new DirectoryEntry("LDAP://192.168.225.100:389/OU=SousMonou,OU=MonOu,DC=dom,DC=fr", "jpb", "pwd");
/* User creation
*/
DirectoryEntry auser = deBase.Children.Add("cn=a User", "user");
auser.CommitChanges();
auser.Properties["samaccountname"].Value = "AUser";
auser.Properties["givenName"].Value = "A";
auser.Properties["sn"].Value = "User";
auser.Properties["displayName"].Value = "AUser";
auser.Properties["userPrincipalName"].Value = "AUser@dom.fr";
auser.Properties["pwdLastSet"].Value = 0;
auser.Properties["userAccountControl"].Value = 544;
auser.CommitChanges();
/* Retreiving the user
*/
DirectorySearcher dsLookForDomain = new DirectorySearcher(deBase);
dsLookForDomain.Filter = "(&(cn=a User))";
dsLookForDomain.SearchScope = SearchScope.Subtree;
SearchResult srUser = dsLookForDomain.FindOne();
if (srUser != null)
{
DirectoryEntry deUser = srUser.GetDirectoryEntry();
deUser.Properties["departmentNumber"].Value = "Test Department";
deUser.CommitChanges();
}
}