我创建了一个AD林,使用其全局目录连接字符串在林中的所有域中搜索用户。
我正在尝试使用c#代码获取AD用户的thumbnailPhoto。但是我没有在结果对象中获得thumbnailPhoto属性,即使它存在于AD中。
我使用PowerShell验证了AD中的thumbnailPhoto道具。我也通过使用LDAP连接字符串验证了它。这两种情况我都得到了字节数组。
以下是获取用户及其属性的代码,_configuration.GlobalCatalog返回格式为(GC:// domain-name)的全局编录连接字符串。
public Task<ProfileImage> GetProfileImageByEmail(string email)
{
var filterQuery = ("mail=" + email);
return Task.FromResult(GetProfileImageFromAD(filterQuery));
}
private ProfileImage GetProfileImageFromAD(string filterQuery)
{
var result = GetADUserDetails(filterQuery);
if (result == null)
return null;
if (result.Properties.Contains("thumbnailPhoto"))
{
var imageBytes = result.Properties["thumbnailPhoto"][0] as byte[];
if (imageBytes != null)
{
return new ProfileImage
{
Content = new MemoryStream(imageBytes),
ContentType = "image/jpeg"
};
}
}
return null;
}
private SearchResult GetADUserDetails(string filterQuery)
{
using (var userBinding = new DirectoryEntry(_configuration.GlobalCatalog))
{
using (DirectorySearcher adSearch = new DirectorySearcher(userBinding))
{
adSearch.ReferralChasing = ReferralChasingOption.All;
adSearch.Filter = filterQuery;
adSearch.PropertiesToLoad.Add("mail");
adSearch.PropertiesToLoad.Add("sn");
adSearch.PropertiesToLoad.Add("givenName");
adSearch.PropertiesToLoad.Add("thumbnailPhoto");
return adSearch.FindOne();
}
}
}
感谢任何帮助。
答案 0 :(得分:0)
在域控制器上打开ADSIEdit,连接到架构命名上下文,找到属性CN = Picture,CN = Schema,CN = Configuration ...并转到它的属性。验证isMemberOfPartialAttributeSet是否设置为TRUE