2010-04-15 6 views
0

J'ai du code sur Internet concernant la récupération de NetBIOSName (nom de domaine Pre-Windows 2000) d'un domaine Active Directory. Voici mon exemple de code:Impossible d'obtenir les propriétés ncName et netBIOSName

Me._rootDSE = New System.DirectoryServices.DirectoryEntry("GC://RootDSE", "", "") 
     Dim results As System.DirectoryServices.SearchResultCollection = Nothing 
     Dim ADSPath As String = "GC://CN=Partitions," + Me._rootDSE.Properties("configurationNamingContext").Value.ToString() 

     Dim adse As System.DirectoryServices.DirectoryEntry = New System.DirectoryServices.DirectoryEntry(ADSPath, "", "") 

     Dim searcher As System.DirectoryServices.DirectorySearcher 

     searcher = New System.DirectoryServices.DirectorySearcher(adse) 
     searcher.SearchScope = DirectoryServices.SearchScope.OneLevel 
     searcher.Filter = "(&(objectClass=crossRef)(systemflags=3))" 
     searcher.PropertiesToLoad.Add("netbiosname") 
     searcher.PropertiesToLoad.Add("ncname") 

     results = searcher.FindAll() 

     If results.Count > 0 Then 
     For Each sr As System.DirectoryServices.SearchResult In results 
      Dim de As System.DirectoryServices.DirectoryEntry = sr.GetDirectoryEntry() 
      'netbiosname and ncname properties returns nothing 
      System.Diagnostics.Trace.WriteLine(sr.GetDirectoryEntry().Properties("netbiosname").Value.ToString()) 
      System.Diagnostics.Trace.WriteLine(sr.GetDirectoryEntry().Properties("ncname").Value.ToString()) 
     Next 
     End If 

Quand je suis en utilisant le "(& (objectClass = crossRef) (systemFlags = 3))" filtre, je ne reçois aucun résultat, mais quand je l'ai enlevé le filtre systemFlags, je obtenir des résultats.

Cependant, sur les résultats de recherche que j'ai obtenus, je ne peux toujours pas accéder aux valeurs des propriétés ncName et NetBIOSName. Je peux obtenir d'autres propriétés comme distinguishedName et CN du résultat de recherche correctement.

Une idée de ce que je pourrais faire de mal, ou où chercher plus loin?

Répondre

1

J'ai trouvé une solution, je ne sais pas si c'est la bonne mais ça marche. J'ai changé la valeur de ADsPath de

Dim ADSPath As String = "GC://CN=Partitions," + Me._rootDSE.Properties("co.. 

à

Dim ADSPath As String = "LDAP://<server>/CN=Partitions," + Me._rootDSE.Properties("co.. 

Je fourni l'adresse du serveur LDAP et tout a fonctionné. Maintenant, si seulement je pouvais obtenir l'adresse IP ou le FQDN du serveur LDAP par programme, je n'aurai pas besoin d'utiliser le fichier de configuration pour stocker la valeur du serveur LDAP.

+2

Cela n'a pas fonctionné car vous avez effectué une recherche dans le catalogue global (GC: //) et l'attribut netbiosname n'y est pas stocké. – Amnon

Questions connexes