Question LDAP - Récupère une liste de tous les attributs / valeurs?


Est-il possible de récupérer une liste de tous les attributs / valeurs de LDAP sans spécifier, si oui, comment cela est-il possible?


12
2017-07-13 04:44


origine


Réponses:


Je saisis la liste de tous les paramètres de mon objet de classe DirectoryEntry. J'espère que cela aidera:

objectClass = System.Object[]
cn = Administrator
sn = Kwiatek (Last name)
c = PL (Country Code)
l = Warszawa (City)
st = Mazowieckie (Voivodeship)
title = .NET Developer
description = Built-in account for administering the computer/domain
postalCode = 00-000
postOfficeBox = Warszawa Ursynów
physicalDeliveryOfficeName = Wojskowa Akademia Techniczna
givenName = Piotr (First name)
distinguishedName = CN=Administrator,CN=Users,DC=helpdesk,DC=wat,DC=edu
instanceType = 4
whenCreated = 2012-11-23 06:09:28
whenChanged = 2013-02-23 13:24:41
displayName = Piotr Kwiatek (Konto administratora)
uSNCreated = System.__ComObject
memberOf = System.Object[]
uSNChanged = System.__ComObject
co = Poland
company = HELPDESK
streetAddress = Kaliskiego 2
wWWHomePage = http://www.piotr.kwiatek.org
name = Administrator
objectGUID = System.Byte[]
userAccountControl = 512
badPwdCount = 0
codePage = 0
countryCode = 616
badPasswordTime = System.__ComObject
lastLogoff = System.__ComObject
lastLogon = System.__ComObject
logonHours = System.Byte[]
pwdLastSet = System.__ComObject
primaryGroupID = 513
objectSid = System.Byte[]
adminCount = 1
accountExpires = System.__ComObject
logonCount = 178
sAMAccountName = Administrator
sAMAccountType = 805306368
objectCategory = CN=Person,CN=Schema,CN=Configuration,DC=helpdesk,DC=wat,DC=edu
isCriticalSystemObject = True
dSCorePropagationData = System.Object[]
lastLogonTimestamp = System.__ComObject
mail = spam@kwiatek.org
nTSecurityDescriptor = System.__ComObject

Et ici vous avez le code:

string currentUserSid = WindowsIdentity.GetCurrent().User.Value;

            PrincipalContext ctx = new PrincipalContext(
                ContextType.Domain,
                "helpdesk.wat.edu");

            UserPrincipal up = UserPrincipal.FindByIdentity(
                ctx, IdentityType.Sid,
                currentUserSid);

            /*
             * 
             */
            DirectoryEntry entry = up.GetUnderlyingObject() as DirectoryEntry;
            PropertyCollection props = entry.Properties;

            /*
             * 
             */
            foreach (string propName in props.PropertyNames)
            {
                if (entry.Properties[propName].Value != null)
                {
                    Console.WriteLine(propName + " = " + entry.Properties[propName].Value.ToString());
                }
                else
                {
                    Console.WriteLine(propName + " = NULL");
                }
            }


            Console.ReadKey();

21
2018-04-17 13:43



Spécifiez "*" comme seule valeur dans la liste des attributs à renvoyer.

Si vous souhaitez également les attributs opérationnels, ajoutez "+" à la liste.


14
2017-07-13 07:53



    // This will list ALL the properties from AD (between 200 and 800..or more)
    // If someone has a solution for non AD servers please post it!

    List<String> properties = new List<String>();
    IPAddress[] ips = Dns.GetHostAddresses(Server).Where(w => w.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork).ToArray();
    if (ips.Length > 0)
    {
        DirectoryContext directoryContext = new DirectoryContext(DirectoryContextType.DirectoryServer, ips[0].ToString() + ":389", Username, Password);
        ActiveDirectorySchema adschema = ActiveDirectorySchema.GetSchema(directoryContext);
        ActiveDirectorySchemaClass adschemaclass = adschema.FindClass("User");

        // Read the OptionalProperties & MandatoryProperties
        ReadOnlyActiveDirectorySchemaPropertyCollection propcol = adschemaclass.GetAllProperties();

        foreach (ActiveDirectorySchemaProperty schemaProperty in propcol)
            properties.Add(schemaProperty.Name.ToLower());
    }

4
2018-06-07 17:36



Bien "récupérer tous les attributs" seul, dans la mesure où un répertoire est une préoccupation n'a pas de sens. Tu veux dire :

  1. Tous les attributs possibles de l'utilisateur tels qu'ils sont décrits dans le SCHEMA
  2. Tous les attributs utilisateur valorisés
  3. Tous les attributs utilisateur et opérationnel

Et je ne m'occupe pas du fait que certains attributs d'utilisateurs peuvent être en lecture seule et d'autres uniquement avec des valeurs spécifiques. J'ajoute le moyen d'obtenir le contenu.

@Ghostfire offre la solution pour récupérer tous les attributs utilisateur valorisés et les attributs opérationnels.

DirectoryEntry deUser = new DirectoryEntry("LDAP://WM2008R2ENT:389/CN=AUser,OU=MonOu,DC=dom,DC=fr");


foreach (string property in deUser.Properties.PropertyNames)
{
  Console.WriteLine("\t{0} : {1} ", property, deUser.Properties[property][0]);
}

Mais rappelez-vous que dans une recherche LDAP, le meilleur moyen est de donner les attributs que vous souhaitez récupérer:

/* Connection to Active Directory
 */
DirectoryEntry deBase = new DirectoryEntry("LDAP://WM2008R2ENT:389/dc=dom,dc=fr");

/* Directory Search
 */
DirectorySearcher dsLookFor = new DirectorySearcher(deBase);
dsLookFor.Filter = "(sn=users)";
dsLookFor.SearchScope = SearchScope.Subtree;
dsLookFor.PropertiesToLoad.Add("cn");
dsLookFor.PropertiesToLoad.Add("givenName");
dsLookFor.PropertiesToLoad.Add("telephoneNumber");

dsLookFor.Sort = new SortOption("givenName", SortDirection.Descending);
dsLookFor.VirtualListView = new DirectoryVirtualListView(1, 0, 2);
SearchResultCollection srcUsers = dsLookFor.FindAll();

3
2017-07-13 08:47



Vous pouvez utiliser un DirectoryEntry pour générer une liste de propriétés, vous devrez bien sûr utiliser un pour chacun pour parcourir la liste des propriétés.

    DirectoryEntry objADAM = default(DirectoryEntry);
    string properties = string.Empty;
    foreach (string property in objADAM.Properties.PropertyNames)
    {
        properties += property + ", ";
    }

vous pouvez cependant toujours vous référer à http://www.codeproject.com/KB/system/everythingInAD.aspx en ce qui concerne C # et Active Directory.

METTRE À JOUR: http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C


2
2017-07-13 08:07



Pour obtenir une liste de toutes les propriétés possibles, vous devez consulter le schéma d'un objetClass donné.


0
2017-12-09 22:41