如何使用C#在Active Directory中正确设置/获取departmentNumber属性?

时间:2012-04-02 11:25:19

标签: c# active-directory

我一直在尝试使用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”属性?尽管试图找到有同样问题的人,但我没有提出任何答案,甚至没有指出正确的方向,所以任何帮助都非常感谢。如果您需要更多信息,请询问。

1 个答案:

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