2009-10-09 7 views
8

J'utilise le Active Directory Explorer de Mark Russinovich. C'est un excellent outil. Je l'utilise pour naviguer dans le répertoire actif pour m'assurer que mon programme qui utilise DirectorySearcher de .NET retourne des données correctes.Recherche d'un objet GUID dans AD

Quelque chose se passe bien, lorsque je tente de chercher au cœur de mon programme avec DirectorySearcher pour objectGUID, si je passe dans le GUID réel en tant que chaîne ne retourne rien, alors que si j'utilise Active Directory Explorer, quand j'ajoute

objectGuid avec la valeur f8d764ff-9a6a-418e-A641-b6f99661a8d5, la clause de recherche devient: (objectGUID = \ FFd \ D7 \ F8j \ 9A \ 8EA \ A6A \ B6 \ F9 \ 96a \ A8 \ D5 *)

Comment faire cela pour directorySearcher dans mon programme, je suppose que c'est une chaîne d'octets, mais je ne peux pas le comprendre.

Répondre

10

Le forums accompagnant l'excellent The .NET Developer's Guide to Directory Services Programming (Joe Kaplan/Ryan Dunn) est une excellente source d'information comme celle-ci.

Vérifiez ce fil ici intitulé Find the object using objectGuid property, qui montre comment vous pouvez convertir un GUID "régulier" au format S.DS "OctetString".

internal string ConvertGuidToOctetString(string objectGuid) 
{ 
    System.Guid guid = new Guid(objectGuid); 
    byte[] byteGuid = guid.ToByteArray(); 

    string queryGuid = ""; 

    foreach (byte b in byteGuid) 
    { 
     queryGuid += @"\" + b.ToString("x2"); 
    } 

    return queryGuid; 
} 

Cela pourrait être légèrement optimisé en utilisant un StringBuilder au lieu de consécutivement concaténant une chaîne - mais il semble par ailleurs assez simple.

Espérons que cela aide.

Marc

+0

Grande ressource en effet, merci! – Matt

3
... 
searcher.PropertiesToLoad.Add("objectGUID"); 

SearchResultCollection found = found = searcher.FindAll(); 

foreach (SearchResult result in found) 
{ 
    Guid oGuid = new Guid((byte[])result.Properties["objectGUID"][0]); 
} 
... 
1

Pour obtenir un octuor à cordes utilisable par ADExplorer, appliquer ces étapes à la chaîne GUID:

  • premier majuscule le GUID:

F8D764FF-9A6A-418E-A641-B6F99661A8D5

  • diviser chaque trait en cinq parties:

F8D764FF, 9A6A, 418E, A641, B6F99661A8D5

  • diviser chaque partie en octets (deux chiffres hexadécimaux chacun):

{F8, D7, 64, FF}, {9A, 6A}, {41, 8E}, {A6, 41}, {B6, F9, 96, 61, A8, D5}

  • inverser la octets des trois premières parties:

{FF, 64, D7, F8}, {6A, 9A}, {8E, 41}, {A6, 41}, {B6, F9, 96, 61, A8, D5}

  • mépris de la division en parties:

FF, 64, D7, F8, 6A, 9A, 8E, 41, A6, 41, B6, F9, 96, 61, A8, D5

  • préfixer une barre oblique inverse pour chaque octet:

\FF, \64, \D7, \F8, \6A, \9A, \8E, \41, \A6, \41, \B6, \F9, \96, \61, \A8, \D5

  • concaténer les octets:

\FF\64\D7\F8\6A\9A\8E\41\A6\41\B6\F9\96\61\A8\D5