Avviato utilizzando lo spazio dei nomi System.DirectoryServices.AccountManagement
, per eseguire la ricerca su un utente nella directory attiva (AD). Ho anche bisogno del gestore dell'utente, ma mi sembra di aver colpito un bernoccolo usando questo spazio dei nomi. codice attuale per ottenere una persona:C# - Ricerca di un gestore utenti nella directory attiva
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();
}
}
Eseguire di ricerca per la persona
private UserPrincipal GetUser(string userName) {
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, userName);
return user;
}
Che è un altro modo per accedere direttamente il nome distinto del gestore di un particolare utente?
- possibile risposta parziale here in VB, ma non vedo nulla di riferimento per i manager.
- Un'altra possibile parziale here, ancora una volta, nulla sui gestori.
Hai provato questo? Non funziona, per me. UserPrincipalEx.FindByIdentity non restituisce un oggetto UserPrincipalEx e il casting in UserPrincipalEx causa una InvalidCastException. – Naikrovek
@Naikrovek: scusa, errore mio, ho ritagliato un po 'troppo codice dal mio esempio (molto più lungo). Avevo perso i due metodi 'FindByIdentity' e' FindByIdentityWithType' sovraccaricati - li ho aggiunti al mio snippet di codice - e sì, con questo codice, l'ho appena controllato su Active Directory di Windows Server 2008 R2 e funziona perfettamente per me. –
Funziona alla grande, grazie. – Naikrovek