#c# #.net #active-directory
#c# #.net #active-directory
Вопрос:
при перечислении групп текущего пользователя через AD .NET API я иногда получаю
COMException: Unknown error (0x80005000)
Вот мой код :
var userName = Environment.UserName;
var context = new PrincipalContext(ContextType.Domain);
var user = UserPrincipal.FindByIdentity(context, userName);
foreach (var userGroup in user.GetGroups())
{
Console.WriteLine(userGroup.Name);
}
В чем проблема? Я думал, что каждый пользователь может получить список СВОИХ групп?Это кажется странным поведением, иногда это может быть воспроизведено следующим образом: при запуске на ПК с ‘UserA’ происходит сбой, но он успешно перечисляет ДРУГИЕ группы ‘UserB’ (в разделе ‘UserA’)!
Комментарии:
1. Вызов чего-либо в Null вызовет исключение NullReferenceException, а не COMException, и да, пользователь не равен null, я упростил код (убрал проверку ошибок)
2. Кстати, нашел что-то в службе поддержки Microsoft, похоже, это известная проблема, я опубликую ссылку
Ответ №1:
Попробуйте использовать
var context = new PrincipalContext(ContextType.Domain, "yourcompany.com", "DC=yourcompany,DC=com", ContextOptions.Negotiate);
Если для параметра ContextOption установлено значение Negotioate, клиент аутентифицируется с помощью Kerberos или NTLM, поэтому, даже если имя пользователя и пароль не указаны, API управления учетными записями привязывается к объекту с помощью контекста безопасности вызывающего потока.
Ответ №2:
У меня была такая же проблема, я решил ее, указав доменное имя при создании PrincipalContext
:
var domain = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);
var user = UserPrincipal.FindByIdentity(domain, Environment.UserName);
Ответ №3:
0x80005000 = E_ADS_BAD_PATHNAME итак, вы где-то указали недопустимый adspath, может быть, вам нужно добавить LDAP:// префикс или противоположность делают это дважды? Установите точку останова и проверьте значение…
РЕДАКТИРОВАТЬ: AdsPath должен иметь значение типа «LDAP://CN=Administator,CN= Users, DC= contoso, DC = com», похоже, у вас неверный путь.
Комментарии:
1. Не могли бы вы, пожалуйста, предоставить более подробную информацию, какой путь, какое значение проверять?
2. ((Система. DirectoryServices. Управление учетными записями. Принципал)(пользователь)). DistinguishedName равно ‘CN =MyAccountName,OU= MyCompany Users, DC= mycompany, DC= local’ и это работает, на чужом компьютере это не работает
3. support.microsoft.com/kb/324433 — нашел это, но, похоже, это также не работает