Imports System.DirectoryServices.AccountManagement
Imports System.DirectoryServices
Imports System.Text
Public Class Form1
'Boton que devuelve la lista de usuarios de un grupo especifico
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim strNombreGrupo As String
Dim strUsuariosGrupo As String
strNombreGrupo = InputBox("Introduce el nombre del grupo del directorio activo " _
& "del que quieres visualizar los usuarios :", "INTRODUZCA EL GRUPO ")
strUsuariosGrupo = ObtenerUsuariosGrupo(strNombreGrupo)
MessageBox.Show(strUsuariosGrupo, "USUARIOS DEL GRUPO: " & strNombreGrupo, _
MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
'Funcion que devuelve toda la lista de usuarios de un grupo especifico
Public Function ObtenerUsuariosGrupo(ByVal strNombreGrupo As String) As String
Dim objDirectorioActivo As DirectoryEntry = New DirectoryEntry("LDAP://192.168.1.108/DC=indar,DC=local")
Dim dsDirectorySearcher As New DirectorySearcher(objDirectorioActivo)
Dim strUsuarios As String
Dim intEqualsIndex As Integer
Dim intCommaIndex As Integer
Dim sbGroupUsers As New StringBuilder
With dsDirectorySearcher
.Filter = "sAMAccountName=" & strNombreGrupo
.PropertiesToLoad.Add("member")
Try
Dim dsResult As SearchResult = .FindOne
Dim contador As Integer
If dsResult Is Nothing Then
Return Nothing
End If
For contador = 0 To dsResult.Properties("member").Count - 1
strUsuarios = dsResult.Properties("member")(contador).ToString
intEqualsIndex = strUsuarios.IndexOf("=", 1)
intCommaIndex = strUsuarios.IndexOf(",", 1)
If intEqualsIndex = -1 Then
Return Nothing
End If
'Extraer el nombre del string
sbGroupUsers.Append(strUsuarios.Substring((intEqualsIndex + 1), (intCommaIndex - intEqualsIndex) - 1))
sbGroupUsers.Append(ControlChars.CrLf)
Next contador
Catch ex As Exception
MessageBox.Show("Error en funcion ObtenerUsuariosGrupo" & vbNewLine & vbNewLine _
& ex.Message, "Active Directory Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End With
Return sbGroupUsers.ToString
End Function
'Boton que devuelve todos los grupos a los que pertenece un usuario especifico.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim strUserLogin As String
Dim strGrupos As String
strUserLogin = InputBox("Introduzca el login name del usuario :", "INTRODUZCA EL LOGIN NAME DEL USUARIO")
strGrupos = ObtenerGruposUsuario(strUserLogin)
MessageBox.Show(strGrupos, "GRUPOS DEL USUARIO: " & strUserLogin, MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
'Devuelve todos los grupos a los que pertenece un usuario especifico
Public Function ObtenerGruposUsuario(ByVal strLoginName As String) As String
Dim dsDirectoryEntry As New DirectoryEntry("LDAP://192.168.1.108/DC=indar,DC=local")
Dim dsSearcher As New DirectorySearcher(dsDirectoryEntry)
Dim contador As Integer
Dim strGrupos As String
Dim intEqualsIndex As Integer
Dim intCommaIndex As Integer
Dim sbUserGroups As New StringBuilder
dsSearcher.Filter = "saMAccountName=" & strLoginName
dsSearcher.PropertiesToLoad.Add("memberOf")
Try
Dim dsResult As SearchResult = dsSearcher.FindOne
If dsResult Is Nothing Then
Return Nothing
End If
For contador = 0 To (dsResult.Properties("memberOf").Count - 1)
strGrupos = CType(dsResult.Properties("memberOf")(contador), String)
intEqualsIndex = strGrupos.IndexOf("=", 1)
intCommaIndex = strGrupos.IndexOf(",", 1)
If intEqualsIndex = -1 Then
Return Nothing
End If
sbUserGroups.Append(strGrupos.Substring((intEqualsIndex + 1), (intCommaIndex - intEqualsIndex) - 1))
sbUserGroups.Append(ControlChars.CrLf)
Next
Catch ex As Exception
MessageBox.Show("Error en funcion ObtenerGruposUsuario" & vbNewLine & vbNewLine _
& ex.Message, "Active Directory Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Return sbUserGroups.ToString.Trim
End Function
'Boton con el que se comprueba si un usuario pertenece a un grupo
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim strLogin As String
Dim strGrupo As String
Dim blnValidated As Boolean
Dim strDisplayResults As String
strLogin = InputBox("Introduce el LOGIN name del usuario: ", "INTRODUZCA LOGIN NAME DEL USUARIO")
strGrupo = InputBox("Introduce el GRUPO: ", "INTRODUZCA EL GRUPO")
blnValidated = ValidarGrupoUsuario(strLogin, strGrupo)
If blnValidated = True Then
strDisplayResults = "El usuario '" & strLogin & "' SI pertenece al grupo '" & strGrupo & "' ."
Else
strDisplayResults = "El usuario '" & strLogin & "' NO pertenece al grupo '" & strGrupo & "' ."
End If
MessageBox.Show(strDisplayResults, "Comprobar si un USUARIO pertenece a un GRUPO", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
'Funcion que devuelve TRUE si el usuario pertenece al grupo y devuelve FALSE si el usuario no pertenece al grupo
Public Function ValidarGrupoUsuario(ByVal strLoginName As String, ByVal strNombreGrupo As String) As Boolean
Dim strNombreUsuario As String
Dim strUsuariosGrupo As String
Dim blnUserValidated As Boolean = False
Dim intResult As Integer
strNombreUsuario = ObtenerNombreUsuario(strLoginName)
If strNombreUsuario.Trim = "" Then
Return blnUserValidated
End If
strUsuariosGrupo = ObtenerUsuariosGrupo(strNombreGrupo)
If strUsuariosGrupo = Nothing Then
Return blnUserValidated
End If
intResult = strUsuariosGrupo.IndexOf(strNombreUsuario)
If intResult > -1 Then
'User found in group
blnUserValidated = True
Else
'User not found in group
blnUserValidated = False
End If
Return blnUserValidated
End Function
'Devuelve el nombre completo del directorio activo
Public Function ObtenerNombreUsuario(Optional ByVal strLoginName As String = "", Optional ByVal strDomainName As String = "") As String
Dim dsDirectoryEntry As New DirectoryEntry
Dim strPath As String
Dim strDomain As String
Dim strLogin As String
Dim strFullName As String
If strDomainName = "" Then
strDomain = GetDomainName()
Else
strDomain = strDomainName
End If
If strLoginName = "" Then
strLogin = GetLoginName()
Else
strLogin = strLoginName
End If
'Unknown error when trying to use LADP instead of WinNT
strPath = "WinNT://" & strDomain & "/" & strLogin
Try
dsDirectoryEntry = New DirectoryEntry(strPath)
strFullName = CType(dsDirectoryEntry.Invoke("Get", "FullName"), String)
Catch ex As Exception
strFullName = ""
Finally
dsDirectoryEntry.Close()
dsDirectoryEntry.Dispose()
End Try
Return strFullName
End Function
Public Function GetDomainName() As String
Dim strDomain As String
strDomain = System.Security.Principal.WindowsIdentity.GetCurrent.Name
strDomain = Mid(strDomain, 1, InStr(strDomain, "\") - 1)
Return strDomain
End Function
Public Function GetLoginName() As String
'Returns the users Login name
Return System.Environment.UserName
End Function
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Me.Close()
End Sub
End Class