我有一个转发器控件,我希望用LDAP中的数据填充它。我可以连接到Active Directory,它将返回600多个名称的列表,但是当我尝试绑定数据时,它会返回以下消息:
System.DirectoryServices.SearchResult'不包含名称为'
的媒体资源我也不想仅仅返回名称,而是发送电子邮件,电话,工作提示和其他一些字段。
我有办法做到这一点吗?
这是我的C#代码:
private void GetAllUsers()
{
SearchResultCollection results;
DirectorySearcher ds = null;
DirectoryEntry de = new DirectoryEntry(GetCurrentDomainPath());
ds = new DirectorySearcher(de);
ds.PropertiesToLoad.Add("name");
ds.Filter = "(&(objectCategory=User)(objectClass=person))";
results = ds.FindAll();
rptAD.DataSource = results;
rptAD.DataBind();
foreach (SearchResult sr in results)
{
Debug.WriteLine(sr.Properties["name"][0].ToString());
}
}
这是转发器的代码:
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<div class="container">
<h2>AD Users</h2>
<asp:Repeater ID="rptAD" runat="server">
<HeaderTemplate>
<table class="table table-striped table-bordered">
<tr>
<td>AD User</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%# DataBinder.Eval(Container.DataItem,"name") %>;
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
答案 0 :(得分:0)
我使用这个库已经有一段时间了,但我认为有些属性甚至都没有映射。无论如何,如果您只是想获取全名,请尝试使用属性[“displayName”]
Here链接到有关propertiesToLoad可用的属性的问题。其中一个答案包含属性列表的链接。列表很长,所以我没有检查,但我没有通过快速搜索找到它。
至于返回多个属性,只需像上面那样加载更多属性,就像上面那样:
ds.PropertiesToLoad.Add("sAMAccountName");
ds.PropertiesToLoad.Add("displayName");
ds.PropertiesToLoad.Add("userPrincipalName");
ds.PropertiesToLoad.Add("objectSid");
并以同样的方式获得他们的价值观:
sr.Properties["sAMAccountName"][0].ToString()
sr.Properties["displayName"][0].ToString()
sr.Properties["userPrincipalName"][0].ToString()
sr.Properties["objectSid"][0].ToString()
<强>替代强>
我建议尽管如此,如果可以,请开始使用System.Management.Automation库从AD获取任何内容。我改变了,因为你用powershell命令执行你的代码,这让我的生活更加简单。
using (var powerShell = PowerShell.Create())
{
var adUsersList = powerShell
.AddCommand("Get-ADUser")
.AddParameter("LDAPFilter", ldapQuery)
.AddParameter("Properties", new string[] { "EmailAddress", "LockedOut", "Created", "Modified" })
.Invoke();
}