Rozpoczęto korzystanie z przestrzeni nazw System.DirectoryServices.AccountManagement
, aby wykonać wyszukiwanie użytkownika w aktywnym katalogu (AD). Potrzebuję również menedżera użytkownika, ale wydaje mi się, że uderzyłem w nawierzchnię przy użyciu tej przestrzeni nazw. Aktualny kod, aby uzyskać osoby:C# - Wyszukaj menedżera użytkowników w aktywnym katalogu
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();
}
}
Wykonaj wyszukiwanie dla osoby
private UserPrincipal GetUser(string userName) {
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, userName);
return user;
}
Jaki jest inny sposób na bezpośredni dostęp nazwę wyróżniającą kierownika danego użytkownika?
- Prawdopodobna odpowiedź częściową here w VB, ale nie widzę nic na temat odwołując się do menedżerów.
- Kolejny możliwy częściowy here, znowu nic o menedżerach.
Czy próbowałeś tego? To nie działa, dla mnie. UserPrincipalEx.FindByIdentity nie zwraca obiektu UserPrincipalEx, a rzutowanie na UserPrincipalEx powoduje wyjątek InvalidCastException. – Naikrovek
@Naikrovek: przepraszam - mój błąd - wyciąłem trochę za dużo kodu z mojej (o wiele dłuższej) próbki. Brakowało mi dwóch przeciążonych metod 'FindByIdentity' i' FindByIdentityWithType' - dodałem je do mojego fragmentu kodu - i tak, z tym kodem, po prostu sprawdziłem to w stosunku do Active Directory Win Server 2008 R2 i to działa dobrze dla mnie. –
Działa świetnie, dziękuję. – Naikrovek