miércoles, 6 de noviembre de 2013

Como generar OID (Object Identifier) mediante Power Shell

Recientemente estuve trabajando en un proyecto que incluyó un directorio de usuarios con AD LDS (Active Directory Light Weight Directory Service), y atributos personalizados para los usuarios. Luego de investigar un poco encontre una manera muy expedita de agregar atributos personalizados al objeto "user" del AD LDS, sin embargo para ello es requerido contar con un OID para identificar cada atributo que se desee crear.
Según Wikipedia: "OID es un identificador utilizado para nombrar un objeto (comparar URN). Estructuralmente, un OID consta de un nodo en un espacio de nombres jerárquico asignado, que se define formalmente mediante ASN.1 estándar de la ITU-T X.690. Números sucesivos de los nodos, a partir de la raíz del árbol, identificar cada nodo en el árbol." dicho en palabras màs simples el OID es el identificador único de todo objeto, para crear nuevos objetos es necesario generar un OID válido que en el caso de Microsoft tienen el prefijo: 1.2.840.113556.1.8000.2554.
Existen varias formas de generar el famoso OID, pero encuentro una forma muy sencilla de hacerlo mediante Power Shell, usuando para ello las siguiente instrucciones:
#---
$Prefix="1.2.840.113556.1.8000.2554"
$GUID=[System.Guid]::NewGuid().ToString()
$Parts=@()
$Parts+=[UInt64]::Parse($guid.SubString(0,4),"AllowHexSpecifier")
$Parts+=[UInt64]::Parse($guid.SubString(4,4),"AllowHexSpecifier")
$Parts+=[UInt64]::Parse($guid.SubString(9,4),"AllowHexSpecifier")
$Parts+=[UInt64]::Parse($guid.SubString(14,4),"AllowHexSpecifier")
$Parts+=[UInt64]::Parse($guid.SubString(19,4),"AllowHexSpecifier")
$Parts+=[UInt64]::Parse($guid.SubString(24,6),"AllowHexSpecifier")
$Parts+=[UInt64]::Parse($guid.SubString(30,6),"AllowHexSpecifier")
$OID=[String]::Format("{0}.{1}.{2}.{3}.{4}.{5}.{6}.{7}",$prefix,$Parts[0],$Parts[1],$Parts[2],$Parts[3],$Parts[4],$Parts[5],$Parts[6])
$oid
#---
 Este Script es una contribución de Jiri Formacek 

Espero les ayude en sus proyectos donde sea necesario generar un OID.