VB.NET: Obtenir le nom Complet d'AD
Je suis en train d'essayer d'obtenir le nom complet d'un utilisateur donné leur nom d'utilisateur "domaine\usarname". Essayé un couple de différents exemples, mais aucune ne semble fonctionner.
Je suis l'aide de Visual Basic .Net 2010.
J'ai eu à l'origine le code suivant dans VBS et porté à VBA et travaillent bien. Si j'essaie d'utiliser le même code dans VB.NET 2010-je obtenir de multiples erreurs et le chemin LDAP n'est pas trouvé, même si je l'entrer manuellement.
Function FindUser()
On Error GoTo Err
Dim objRoot As Variant
Dim LDAPdomainName As String
Dim UserName As String
Dim UserDomain As String
Dim cn As Variant
Dim cmd As Variant
Dim rs As Variant
UserName = VBA.Environ("UserName") ' Gets Current User
UserDomain = VBA.Environ("UserDomain") 'Gets Current User's Domain
Set objRoot = GetObject("LDAP://RootDSE")
Domain= objRoot.Get("defaultNamingContext")
Set cn = CreateObject("ADODB.Connection")
Set cmd = CreateObject("ADODB.Command")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=ADsDSOObject;"
cmd.activeconnection = cn
'cmd.commandtext = "SELECT ADsPath FROM 'LDAP://" & Domain & "' WHERE sAMAccountName = '" & UserName & "'"
'To see all attributes names available, connect with Active Directory Explorer and add to Select.
cmd.commandtext = "SELECT cn, mail FROM 'LDAP://" & Domain & "' WHERE sAMAccountName = '" & UserName & "'"
Set rs = cmd.Execute
Do Until rs.EOF
Debug.Print rs("cn") & " E-mail: " & rs("mail")
rs.MoveNext
Loop
Exit_Err:
If Not rs Is Nothing Then rs.Close
If Not cn Is Nothing Then cn.Close
Set rs = Nothing
Set cmd = Nothing
Set cn = Nothing
Exit Function
Err:
If Err <> 0 Then
MsgBox "Error connecting to Active Directory Database: " & Err.Description
Else
If Not rs.BOF And Not rs.EOF Then
rs.MoveFirst
MsgBox rs(0)
Else
MsgBox "Not Found"
End If
End If
Resume Exit_Err
End Function
- ce que vous avez essayé jusqu'à présent ? Vous devez ajouter un peu de code que vous avez testé jusqu'à présent, nous ne proposons pas quelque chose que vous avez déjà exploré.
- Eh bien, ce qu'il a essayé n'a pas marché, donc tout ce qui fonctionne est une proposition valable.
Vous devez vous connecter pour publier un commentaire.
Si vous êtes sur .NET 3.5 et le haut, vous devriez vérifier le
System.DirectoryServices.AccountManagement
(S. DS.AM) de l'espace de noms. À lire ici:Fondamentalement, vous pouvez définir un contexte de domaine et de trouver facilement les utilisateurs et/ou groupes d'ANNONCES:
Le nouveau S. DS.SUIS, il est vraiment facile de jouer avec les utilisateurs et groupes AD!
Ce sujet:
J'ai 2 fonctions qui m'ont aidé à le faire partir .Net 2.0 all le chemin .Net 4.0
après un rapide coup d'œil à MSDN ce devrait fonctionne dans toutes les versions de la .Net runtimes.
Les 2 fonctions sont:
Un appel d'exemple serait:
Cet exemple appel de travail lors de l'exécution versions 2.0 à 4.0 à coup sûr et encore devrait fonctionne dans toutes les versions publiées jusqu'à présent.
La MSDN liés pages sont:
http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.name(v=VS.100).aspx
http://msdn.microsoft.com/en-us/library/94se97ay(v=VS.80).aspx
http://msdn.microsoft.com/en-US/library/system.directoryservices.directoryentry(v=VS.80).aspx
http://msdn.microsoft.com/en-US/library/system.directoryservices.searchresult(v=VS.80).aspx
Vous pouvez utiliser Système.DirectoryServices espace de noms pour effectuer ce genre de tâche (DirectoryServices est un wrapper géré pour LDAP).
Vous pouvez utiliser un chaîne de recherche comme
"(&(objectCategory=user)(objectClass=person)(sAMAccountName=" + userId + "))"
à recherche pour un utilisateur (nom d'utilisateur aurait besoin d'être remplacé par l'ID de l'Utilisateur).De lier tout cela ensemble, vous pouvez modifier l'extrait de code ci-dessous pour retirer toutes les propriétés pour un utilisateur. Vous pouvez ensuite ajuster à se concentrer uniquement sur le Nom de l'Utilisateur.