Je dois d'abord énumérer tous les groupes AD de l'utilisateur actuel. Obtenir le SID et le nom est facile:Comptage des membres du groupe de sécurité Active Directory
foreach(var group in WindowsIdentity.GetCurrent().Groups)
{
var sid = new SecurityIdentifier(group.Value);
string name = (group.Translate(typeof(NTAccount)) as NTAccount).Value;
}
Alors j'ai besoin de déterminer le nombre de membres dans chacun des groupes, et je ne peux pas que pour travailler. Je suppose que j'ai besoin d'un moyen d'obtenir le nom distinctif des groupes des utilisateurs actuels. Une idée de comment l'obtenir?
Ce que je l'ai fait jusqu'à présent: J'ai essayé WMI requête comme ceci, mais il renvoie aucun résultat parce que je besoin du nom de domaine complet, mais NTAccount
ne me donne que le compte de domaine « convivial » (DOMAIN \ groupe) :
SELECT PartComponent FROM Win32_GroupUser
WHERE (GroupComponent = "Win32_Group.Domain='somedomain', Name='somegroup'")
Alors j'ai essayé LDAP, travaillant autour du chemin/nom distinctif manquant en se liant au SID du groupe:
var adGroupEntry = new DirectoryEntry(String.Format("LDAP://<SID={0}>", group.Value));
if (adGroupEntry != null)
{
IEnumerable members = adGroupEntry.Invoke("Members", null) as IEnumerable;
if (members != null)
{
foreach (object member in members)
{
noOfMembers++;
}
}
}
I t trouve le groupe, la propriété name renvoie la valeur correcte, cependant Members
ne contient aucun élément. Si je connaissais le chemin LDAP complet pour un groupe (comme lorsque je le code en dur), le code ci-dessus donnerait le nombre correct d'utilisateurs dans le groupe.
Qu'est-ce qui me manque ici? Je ne suis pas très familier avec Active Directory ou WMI.
Restrictions:
- Je ne peux pas coder en dur les noms de domaine ou les chemins LDAP. Je suis limité à .NET 2.0, donc je ne peux pas utiliser
System.DirectoryServices.AccountManagement
.
Merci beaucoup de tester mon code et la solution de contournement! En fait, il a résolu le problème pour moi aussi:) Je ne m'attendais pas à pouvoir obtenir le nom distinctif des propriétés, car la propriété typée pour cette info ne contenait pas de contenu utile dans QuickWatch. – realMarkusSchmidt