Inicio › Foros › Lenguajes de programación, desarrollo, código fuente › .Net C# VB y PowerShell › Convertir SID (array de bytes) a string en C# [RESUELTO]
Etiquetado: active directory, array, byte, c sharp, c#, cadena de texto, conversión, convert, convert sid to string, convertir, csharp, directorio activo, identificador, identifier, ldap, resuelto, SecurityIdentifier, sid, sid a string, sid a texto, solución, solucionado, solved, string, texto, tipos
- Este debate tiene 3 respuestas, 2 mensajes y ha sido actualizado por última vez el hace 1 año por alonsojpd.
-
AutorEntradas
-
12/19/2023 a las 13:16 #50073VariosModerador
Hola, obtengo el SID de un computer mediante acceso a Active Directory (LDAP), con el siguiente código:
C#1234567891011121314151617181920212223242526272829303132333435363738394041424344454647using System;using System.DirectoryServices;namespace ProyectoA_LDAP{class LDAP{//Obtener atributo objectSid de LDAP (Active Directory) de objeto computerpublic static void ObtenerDatosLDAPEquipo(ref string objectSid){Inventario inv = new Inventario();string dominio = inv.obtenerDominioEquipo();string equipo = inv.obtenerNombrePC();objectSid = string.Empty;if (!string.IsNullOrEmpty(dominio) && !string.IsNullOrEmpty(equipo)){try{using (var entradaDirectorio = new DirectoryEntry(string.Format("LDAP://{0}", dominio))){var busqueda = new DirectorySearcher(entradaDirectorio, (string.Format("(&(objectCategory=computer)(name={0}))", equipo)));busqueda.PropertiesToLoad.Add("objectSid");busqueda.SizeLimit = 1;SearchResult resultadoBusqueda = busqueda.FindOne();if (resultadoBusqueda != null){//Obtenemos objectSidif (resultadoBusqueda.Properties.Contains("objectSid")){var sid = resultadoBusqueda.Properties["objectSid"][0];objectSid = sid.ToString();}}}}catch (Exception error){string texto = $"Error al obtener datos de LDAP [{equipo}]. Error: {error.Message}";Log.EsLog(texto, false);}}}}}En este código, el resultado del objetSid al convertirlo a String con lo que uso me devuelve siempre el mismo valor: System.Byte[] y no me devuelve su valor real.
Y quisiera saber cómo puedo convertir el SID obtenido (objectSid) a string para guardarlo en base de datos en formato que pueda visualizarse al usuario.
12/19/2023 a las 13:23 #50075alonsojpdSuperadministradorCambia estas líneas:
C#123456//Obtenemos objectSidif (resultadoBusqueda.Properties.Contains("objectSid")){var sid = resultadoBusqueda.Properties["objectSid"][0];objectSid = sid.ToString();}por:
C#123456//Obtenemos objectSidif (resultadoBusqueda.Properties.Contains("objectSid")){byte[] sid = (byte[])resultadoBusqueda.Properties["objectSid"][0];objectSid = new SecurityIdentifier(sid, 0).ToString();}Añade al Using:
C#1using System.Security.Principal;12/19/2023 a las 13:30 #50076VariosModeradorGenial, ahora sí, me funciona perfecto, me convierte a una cadena del tipo:
S-X-X-X-…
Resuelto ¡muchas gracias!
01/02/2024 a las 17:38 #50118alonsojpdSuperadministradorEn este artículo tenemos un ejemplo completo que obtiene varios atributos del computer en AD DS, entre ellos, el SID:
Obtener todos los atributos del objeto Computer de Active Directory AD DS con C#
-
AutorEntradas
- Debes estar registrado para responder a este debate.