Начато использование пространства имен System.DirectoryServices.AccountManagement
, чтобы выполнить поиск пользователя в активной директории (AD). Мне также нужен пользовательский менеджер, но я, кажется, ударил удар по дороге, используя это пространство имен. Текущий код, чтобы получить лицо:C# - Поиск менеджера пользователей в активном каталоге
class Person {
// Fields
public string GivenName = null;
public string Surname = null;
public string DistinguishedName = null;
public string Email = null;
public string MangerDistinguishedName = null; // Unable to set this
// Constructor
public Person(string userName) {
UserPrincipal user = null;
try {
user = GetUser(userName);
if (user != null) {
this.GivenName = user.GivenName;
this.Surname = user.Surname;
this.DistinguishedName = user.DistinguishedName;
this.Email = user.EmailAddress;
this.MangerDistinguishedName = user.<NO SUCH PROPERTY TO FIND A MANAGER'S DISTINGUISHED NAME>
}
else {
throw new MissingPersonException("Person not found");
}
}
catch (MissingPersonException ex) {
MessageBox.Show(
ex.Message
, ex.reason
, MessageBoxButtons.OK
, MessageBoxIcon.Error
);
}
catch (Exception ex) {
MessageBox.Show(
ex.Message
, "Error: Possible connection failure, or permissions failure to search for the username provided."
, MessageBoxButtons.OK
, MessageBoxIcon.Error
);
}
finally {
user.Dispose();
}
}
Execute поиск для человека
private UserPrincipal GetUser(string userName) {
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, userName);
return user;
}
Что это еще один способ получить доступ непосредственно к различающемуся имени менеджера конкретного пользователя?
- Возможный частичный ответ here в VB, но я не вижу ничего со ссылкой на менеджеров.
- Другой возможный частичный here, опять же, ничего о менеджерах.
Вы пробовали это? Для меня это не работает. UserPrincipalEx.FindByIdentity не возвращает объект UserPrincipalEx, а приведение в UserPrincipalEx вызывает InvalidCastException. – Naikrovek
@Naikrovek: извините - моя ошибка - я вырезал слишком много кода из моего (гораздо более длинного) образца. Я пропустил два перегруженных метода «FindByIdentity» и «FindByIdentityWithType» - я добавил их в свой фрагмент кода - и да, с помощью этого кода я просто проверил его против Active Directory Windows Server 2008 R2, и он отлично работает для меня. –
Отлично работает, спасибо. – Naikrovek