我需要使用visual basic创建一个小应用程序,它将从AD检索用户并编辑/添加一些属性。这里的代码查询ldap并使用object属性中的信息填充一些文本框。我的vb知识有限,所以请理解我的问题,我想知道是否有更好的方法来实现这个目标:
Dim deSystem As New DirectoryEntry("LDAP://etc")
Dim dsSystem As New DirectorySearcher(deSystem)
Dim srsystem As SearchResult
Try
dsSystem.Filter = ("(&(objectClass=user)(samaccountname=" & TextBox1.Text & "))")
dsSystem.SearchScope = SearchScope.Subtree
dsSystem.PropertiesToLoad.Add("sAMAccountName")
dsSystem.PropertiesToLoad.Add("givenName")
dsSystem.PropertiesToLoad.Add("sn")
dsSystem.PropertiesToLoad.Add("proxyAddresses")
srsystem = dsSystem.FindOne()
TextBox2.Text = srsystem.Properties("givenName").Item(0).ToString
TextBox3.Text = srsystem.Properties("sn").Item(0).ToString
Button3.Enabled = True
Catch ex As Exception
MsgBox(TextBox1.Text & " is an Invalid UserID")
TextBox1.Text = ""
TextBox1.Focus()
End Try
某些属性包含多行,并且某些对象的某些属性不存在,如何在多行文本框中插入多行信息以进行examaple,如何在属性中阻止代码发送错误不存在?现在我使用“.Item(0).ToString”从第0行查询属性,如果该属性不存在则返回错误,我需要绕过这些。 最重要的部分是:如何在AD中更新属性或为对象添加新属性?
答案 0 :(得分:0)
如果您使用的是.NET 3.5及更高版本,则应查看System.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。在这里阅读所有相关内容:
基本上,您可以定义域上下文并轻松在AD中查找用户和/或组:
// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");
if(user != null)
{
// do something here....
}
// find the group in question
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere");
// if found....
if (group != null)
{
// iterate over members
foreach (Principal p in group.GetMembers())
{
Console.WriteLine("{0}: {1}", p.StructuralObjectClass, p.DisplayName);
// do whatever you need to do to those members
}
}
}
新的S.DS.AM让您可以轻松地与AD中的用户和群组一起玩!