.net - example - system directoryservices dll
Filtro de consulta ArgumentException al intentar ampliar el principal OU (1)
En el punto de vista teórico, creo que lo que quieres hacer no tiene sentido. Se explica en el artículo que señala, pero no está tan claro. El concepto de Principal
se basa en el Directory Schema
que describe los objetos que puede agregar a ActiveDirectory.
Las clases Principal, AuthenticablePrincipal, UserPrincipal, ComputerPrincipal y GroupPrincipal se pueden extender para crear objetos personalizados que amplíen el modelo de objetos .
Pero en LDAP en general y es el caso en Active-Directory, la clase organizationalUnit
no es una subclase de la clase de user
, sino solo una subclase de la clase top
.
En otras palabras: desde el punto de vista conceptual, puede observar que un Principal
es un tipo de usuario (Sí en Microsoft las computadoras son usuarios, abren sesiones en el dominio como los usuarios) y organizationalUnit
es una especie de cuadro organizativo ( como un directorio en un sistema de archivos), por lo que el segundo no amplía el primero.
Editado
Aquí hay una subclase de DirectoryEntry que hace lo que desea:
class ClsOrganizationalUnit : DirectoryEntry
{
private DirectoryEntry de;
public string Description
{
get { return (string)de.Properties["description"][0]; }
set { de.Properties["description"].Value = value;
de.CommitChanges();
}
}
public ClsOrganizationalUnit(string dn, string username, string password)
{
de = new DirectoryEntry(dn, username, password);
}
}
class Program
{
static void Main(string[] args)
{
ClsOrganizationalUnit ou = new ClsOrganizationalUnit("LDAP://192.168.183.100:389/ou=Monou,dc=dom,dc=fr", "jpb", "pwd");
/* Set the attribute */
ou.Description = "The description you want";
Console.WriteLine("Here is your OU description : {0}", ou.Description);
/* Remove the attribute */
ou.Description = null;
}
}
Intento crear una extensión de principal para organizationalUnit usando este código a continuación
[DirectoryRdnPrefix("OU")]
[DirectoryObjectClass("organizationalUnit")]
public class OrganizationalUnitPrincipal : Principal
{
public OrganizationalUnitPrincipal(PrincipalContext Context_p)
{
PropertyInfo contextRaw = this.GetType().BaseType.GetProperty("ContextRaw",
BindingFlags.Instance | BindingFlags.NonPublic);
contextRaw.SetValue(this, Context_p, null);
}
}
Pero arroja el siguiente error:
System.ArgumentException: Persisted Principal objects cannot be used as query filters.
Este error ocurre cuando intento recuperar atributos y propiedades de organizationalUnit.
¿Puede esto funcionar o no?
Quiero lograr lo mismo que mostrar en esta página http://msdn.microsoft.com/en-us/site/bb384372