6 Stimmen

Wie erhält man die Domäne von GroupPrincipal?

Ich muss alle Benutzer einer bestimmten lokalen Gruppe in folgendem Format auflisten: "Domäne \UserName ". Ich kann eine Sammlung von GroupPrincipal-Objekten für die Gruppe extrahieren, aber ich weiß nicht, wie ich die Benutzer im erforderlichen Format erhalten kann. GroupPrincipal hat die Eigenschaft Domain nicht.

Der folgende Code gibt Benutzer ohne Domäne aus (z. B. "UserName").

using (var context = new PrincipalContext(ContextType.Machine, null))
{
    using (var group = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, @"My Local Group"))
    {
        if (group != null)
        {
            foreach (var p in group.GetMembers(false))
            {
                Console.WriteLine(p.SamAccountName);
            }
        }
    }
}

Ist es möglich, den Netbios-Namen der Domäne aus dem Hauptobjekt zu erhalten? Und wenn ja, wie erhält man ihn?

12voto

Nicole Calinoiu Punkte 20595

Sie können die Domänendetails aus dem Kontext des Auftraggebers abrufen, z. B.:

foreach (var p in group.GetMembers(false))

    {
        Console.Write(p.SamAccountName);
        if (p.ContextType == ContextType.Domain)
        {
            Console.Write(" ({0})", p.Context.Name);
        }

        Console.WriteLine();
    }

Wenn Sie nur die Kontonamen in der "Domäne" ausgeben wollen \user "Format von einem Rechner in der Domäne, können Sie den SecurityIdentifier des Auftraggebers in einen NTAccount übersetzen, z.B:

foreach (var p in group.GetMembers(false))
{
    Console.WriteLine(p.Sid.Translate(typeof(NTAccount)).ToString());
}

0voto

JPBlanc Punkte 66875

Bei einem reinen LDAP kann der Netbios Name einer Domänenpartition wie folgt abgerufen werden (vorausgesetzt, ich arbeite mit der Partition DC=dom,dc=fr):

/* Connection to Active Directory
 */
DirectoryEntry deConf = new DirectoryEntry("LDAP://WM2008R2ENT:389/CN=Partitions,CN=Configuration,DC=dom,DC=fr", "user", "password");

/* Directory Search
 */
DirectorySearcher dsLookForNetb = new DirectorySearcher(deConf);
dsLookForNetb.Filter = "(nCName=dc=dom,dc=fr)";
dsLookForNetb.SearchScope = SearchScope.Subtree;
dsLookForNetb.PropertiesToLoad.Add("nETBIOSName");

SearchResult RefObj = dsLookForNetb.FindOne();

Console.WriteLine(RefObj.Properties["nETBIOSName"][0]);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X