Cómo leer TermainsServices IADsTSUserEx Property de LDAP en C#?
c#-2.0 terminal-services (3)
Creo que puede usar el método InvokeGet
en su DirectoryEntry
, pasando el nombre de la propiedad que desea leer.
2008-12-10 11:50 CET - Editado en respuesta al comentario
Si especifico un nombre de propiedad de basura, obtengo la misma excepción de COM. ¿Estás seguro de que las propiedades que intentas recuperar forman parte del esquema AD?
Solo para asegurarme, el código que estoy usando es el siguiente:
using (DirectorySearcher searcher = new DirectorySearcher("(cn=Test)"))
{
SearchResult result = searcher.FindOne();
if (result != null)
{
DirectoryEntry entry = result.GetDirectoryEntry();
string s = entry.InvokeGet("TerminalServicesHomeDrive") as string;
MessageBox.Show(s ?? "null");
}
}
He leído las siguientes propiedades de AD,
TerminalServicesProfilePath
TerminalServicesHomeDirectory
TerminalServicesHomeDrive
Intenté DirectoryEntry y DirectorySearcher. Pero ellos no incluyen las propiedades.
Encontré algunos ejemplos en vbscript y VC para leerlos. Sin embargo, no pude hacerlo funcionar en C #. ¿Me estoy perdiendo algo complicado?
EDITAR: ¿Tengo que ejecutarlo en "Windows Server" para que funcione? ¿Se puede leer desde win XP?
No recuerdo exactamente, pero es algo como esto:
//user is a DirectoryEntry
IADsTSUserEx adsiUser = (IADsTSUserEx)user.NativeObject;
luego puede obtener las propiedades de TerminalServices que desea a través de adsiUser.
Según mi experiencia, es mejor que desarrolles en un servidor de Windows con acceso a AD debido a las bibliotecas que utilizas. Entonces, probablemente harás que lo anterior también funcione :)
Esto funciona para mí:
DirectoryEntry user = new DirectoryEntry("LDAP://" + sLDAP_SERVER + "/cn=" + SAMAccount + "," + sLdapFullPath, sUser, sPwd);
//ActiveDs.IADsUser iADsUser = (ActiveDs.IADsUser)user.NativeObject;
ActiveDs.IADsUser cont = null;
cont = user.NativeObject as ActiveDs.IADsUser;
TSUSEREXLib.IADsTSUserEx m_TsUser = (TSUSEREXLib.IADsTSUserEx)cont;
int m_TSLogonDisabled = 0;
m_TsUser.AllowLogon = m_TSLogonDisabled;