Files
ADMIN/UID/Mitarbeiter/frmADsearch.vb
2023-05-15 13:06:53 +02:00

184 lines
6.0 KiB
VB.net

Imports Org.BouncyCastle.Asn1
Imports VERAG_PROG_ALLGEMEIN
Public Class frmADsearch
Dim dt As New DataTable()
Public activeDirectoryObj = New ADObject()
Public Sub New()
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
End Sub
Public Sub New(changelabel As String)
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
lblUser.Text = changelabel
End Sub
Sub initDataTable()
dt.Columns.Add("sAMAccountName", GetType(String))
dt.Columns.Add("givenName", GetType(String))
dt.Columns.Add("sn", GetType(String))
dt.Columns.Add("distinguishedName", GetType(String))
dt.Columns.Add("department", GetType(String))
dt.Columns.Add("company", GetType(String))
dt.Columns.Add("adEntry", GetType(System.DirectoryServices.DirectoryEntry))
End Sub
Sub initDGV(dt As DataTable)
dgvAD.DataSource = dt
If dgvAD.Columns.Count > 0 Then
With dgvAD
.RowHeadersWidth = 10
.Columns("GivenName").HeaderText = "Firstname"
.Columns("GivenName").Width = 75
.Columns("sn").Width = 100
.Columns("sn").HeaderText = "Lastname"
.Columns("sAMAccountName").Width = 75
.Columns("sAMAccountName").HeaderText = "Account"
.Columns("department").Width = 75
.Columns("distinguishedName").HeaderText = "DN-Name"
.Columns("distinguishedName").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
.Columns("department").HeaderText = "Department"
.Columns("company").Width = 75
.Columns("company").HeaderText = "Company"
.Columns("adEntry").Visible = False
End With
End If
End Sub
Private Sub GetActiveDirUserDetails(ByVal username As String, Optional LDAPString As String = "LDAP://DC=VERAG,DC=OST,DC=DMN")
dt.Clear()
Dim dirEntry As System.DirectoryServices.DirectoryEntry
Dim dirSearcher As System.DirectoryServices.DirectorySearcher
Try
dirEntry = New System.DirectoryServices.DirectoryEntry(LDAPString)
dirSearcher = New System.DirectoryServices.DirectorySearcher(dirEntry)
dirSearcher.Filter = " (&(objectClass=user)(objectCategory=person)(|(samAccountName=*" & username & "*)))"
Dim sr As DirectoryServices.SearchResultCollection = dirSearcher.FindAll()
If sr Is Nothing Then
lblHint.Text = "No Entries found"
Exit Sub
ElseIf sr.Count = 0 Then
lblHint.Text = sr.Count & " Entries found"
End If
For Each srEntry As DirectoryServices.SearchResult In sr
Dim de As System.DirectoryServices.DirectoryEntry
de = srEntry.GetDirectoryEntry()
Dim R As DataRow = dt.NewRow
R("givenName") = setNoNullableValue(de.Properties("givenName").Value)
R("sn") = setNoNullableValue(de.Properties("sn").Value)
R("sAMAccountName") = setNoNullableValue(de.Properties("sAMAccountName").Value)
R("department") = setNoNullableValue(de.Properties("department").Value)
R("distinguishedName") = setNoNullableValue(de.Properties("distinguishedName").Value)
R("company") = setNoNullableValue(de.Properties("company").Value)
R("adEntry") = de
dt.Rows.Add(R)
Next
Catch ex As Exception
lblHint.Text = ex.Message
End Try
End Sub
Public Shared Function GetUsersInGroup(ByVal groupname As String, Optional ByVal LDAP As String = "LDAP://DC=VERAG,DC=OST,DC=DMN") As List(Of String)
Dim Userlist As New List(Of String)
Dim locDirectoryEntry As New DirectoryServices.DirectoryEntry(LDAP)
Dim Searcher As New DirectoryServices.DirectorySearcher(locDirectoryEntry, "sAMAccountName=" & groupname)
Dim Result As DirectoryServices.SearchResult = Searcher.FindOne
If Result IsNot Nothing Then
For Each User In Result.Properties("Member")
Userlist.Add(User)
Next
End If
Return Userlist
End Function
Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
lblHint.Text = ""
If cboDomain._value = "" Then
lblHint.Text = "Domain auswählen"
Exit Sub
End If
If txtUser.Text = "" Then
lblHint.Text = "User eingeben!"
Exit Sub
End If
GetActiveDirUserDetails(txtUser.Text)
End Sub
Private Sub frmADsearch_Load(sender As Object, e As EventArgs) Handles MyBase.Load
cboDomain.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("VERAGOST", "LDAP://DC=VERAG,DC=OST,DC=DMN"))
cboDomain.changeItem("verag.ost.dmn")
initDataTable()
initDGV(dt)
End Sub
Private Sub btnUebernehmen_Click(sender As Object, e As EventArgs) Handles btnUebernehmen.Click
For Each row As DataGridViewRow In dgvAD.SelectedRows
activeDirectoryObj = New ADObject With {
.domain = cboDomain.Text,
.ADEntry = IIf(IsDBNull(row.Cells("adEntry").Value), "", row.Cells("adEntry").Value)
}
Next
End Sub
Public Function setNoNullableValue(value As String) As String
If value IsNot Nothing Then
If value <> "" Then
Return value
End If
End If
Return ""
End Function
Private Sub txtUser_KeyDown(sender As Object, e As KeyEventArgs) Handles txtUser.KeyDown
If e.KeyCode = Keys.Enter Then
btnSearch_Click(sender, e)
End If
End Sub
End Class
Public Class ADObject
Public Sub New()
End Sub
Public Property domain As String
Public Property ADEntry As System.DirectoryServices.DirectoryEntry
End Class