2009-10-09 14 views
8

Estoy usando el Active Directory Explorer de Mark Russinovich. Es una gran herramienta.Buscando un objectGUID en AD

Lo estoy usando para navegar por el directorio activo para asegurarme de que mi programa que usa DirectorySearcher de .NET devuelve datos correctos.

Algo sucede, sin embargo, cuando trato de buscar dentro de mi programa con DirectorySearcher para objectGUID, si paso en el GUID real como una cadena que no devuelve nada, en tanto que si uso Active Directory Explorer, cuando agrego

objectGuid con valor f8d764ff-9a6a-418E-A641-b6f99661a8d5, su cláusula de búsqueda se convierte en: (objectGUID = \ FFd \ D7 \ F8j \ 9A \ 8EA \ A6A \ B6 \ F9 \ 96a \ A8 \ D5 *)

¿Cómo puedo hacer esto para directorySearcher en mi programa, supongo que es una cosa de cadena de octetos, pero no puedo resolverlo.

Respuesta

10

El forums que acompaña a la excelente The .NET Developer's Guide to Directory Services Programming (Joe Kaplan/Ryan Dunn) es una excelente fuente de información de este tipo.

Consulte este hilo aquí titulado Find the object using objectGuid property, que muestra cómo puede convertir un GUID "normal" al formato 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; 
} 

Esto podría estar ligeramente optimizado mediante el uso de un StringBuilder en lugar de forma consecutiva concatenar juntos una cadena - pero parece bastante sencillo de lo contrario.

Espero que esto ayude.

Marc

+0

Gran recurso de hecho, gracias! – 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

Para obtener un octeto cadena utilizable por ADExplorer, aplicar estas medidas para la cadena GUID:

  • primera mayúscula el GUID:

F8D764FF-9A6A-418E-A641-B6F99661A8D5

  • dividir en cada guión en cinco partes:

F8D764FF, 9A6A, 418E, A641, B6F99661A8D5

  • dividir cada parte en bytes (dos dígitos hexadecimales cada uno):

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

  • revertir la bytes de las primeras tres partes:

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

  • caso omiso de la división en partes:

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

  • anteponer una barra invertida para cada byte:

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

  • concatenar los bytes:

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