2008-12-10 6 views
2

J'ai lu les propriétés suivantes de AD,Comment lire TermainsServices Propriété IADsTSUserEx de LDAP en C#?

TerminalServicesProfilePath 
TerminalServicesHomeDirectory 
TerminalServicesHomeDrive 

J'ai essayé DirectoryEntry et DirectorySearcher. Mais ils n'incluent pas les propriétés.

Je trouve quelques exemples dans vbscript et VC pour les lire. Cependant, j'ai échoué à le faire fonctionner en C#. Est-ce que je manque une chose délicate?

EDIT: Suis-je dois l'exécuter sur « Windows Server » pour faire cela fonctionne? Peut-il être lu à partir de win XP?

+0

Je ne sais pas si vous avez besoin de Windows Server, mais c'est ce que j'utilise (Server 2003). Je n'ai pas XP à portée de main, j'ai peur. – Arnout

Répondre

1

Je ne me souviens pas exactement, mais il y a quelque chose comme ceci:

//user is a DirectoryEntry 
IADsTSUserEx adsiUser = (IADsTSUserEx)user.NativeObject; 

alors vous pouvez obtenir les propriétés TerminalServices que vous voulez via adsiUser.

De mon expérience, vous êtes mieux développer sur un serveur Windows avec accès à AD en raison des bibliothèques que vous utilisez. Ensuite, vous allez probablement faire le travail ci-dessus, aussi :)

+0

J'ai essayé aussi, mais je me suis un System.InvalidCastException: Impossible de jeter l'objet COM de type « System .__ ComObject » type interface « TSUSEREXLib.IADsTSUserEx ». –

+0

Etes-vous sûr que la DLL d'extension ADSI TS est enregistrée dans le système COM via regsvr32 (un conseil que j'ai récupéré de Joe Kaplan sur le net quelque part). – chriscena

+0

Merci, je comprends que ça marche enfin. Je dois exécuter regsvr32 avant le début de mon application. (Et j'ai oublié de redémarrer mon Nunit hier) –

2

Je pense que vous pouvez utiliser la méthode InvokeGet sur votre DirectoryEntry, passant dans le nom de la propriété que vous voulez lire.

2008-12-10 11:50 CET — Edité en réponse au commentaire

Si je spécifie un nom de propriété des ordures, je reçois la même exception COM. Êtes-vous sûr que les propriétés que vous essayez de récupérer font partie du schéma AD?

Juste pour vous assurer, le code que je utilise est comme suit:

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"); 
    } 
} 
+0

Je l'avais essayé, et il a échoué. System.Runtime.InteropServices.COMException: nom inconnu. (Exception de HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME)) –

+0

Pour d'autres ayant le « nom inconnu » exception - c'est parce que les extensions de serveur de terminaux ne sont pas installés. Facile était de le faire est [installer] (http://www.microsoft.com/download/fr/details.aspx?id=7887) les outils d'administration de serveur distant (RSAT) et les activer dans les fonctionnalités de Windows ou si vous ' Vous avez la DLL appropriée, vous pouvez exécuter "regsvr32 tsuserex.dll" comme mentionné par d'autres. –

+0

Cela fonctionne bien pour moi. Vous devez vérifier si le tsuserex.dll dont vous avez besoin (x86 ou x64) est dans le dossier système de droit (c: \ windows \ system32 ou c: \ windows \ syswow64) puis exécutez resvr32 à partir des dossiers du système. Vous pouvez copier à partir d'une autre machine si vous n'avez pas les dll, ils devraient fonctionner. – LPains

1

Cela fonctionne pour moi:

  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; 
+0

Curios, comment le changement d'interface gérer une défaillance dans cet exemple. m_TsUser est-il défini sur null ou une exception est-elle déclenchée? –

Questions connexes