Screenshots :
Purpose :
This project uses the following features :
- build GUI with Powershell (form, tab, button,…)
- query the Active Directory or a SQL database
Pre-requesites :
This script needs some configuration :
- line 143 : modify the ldap path according to your infrastructure
- line 155 : modify the SQL connection string
- line 158 : modify the SQL select to query and retrieve data from your own SQL server
Scripts :
Import-Module ActiveDirectory -Cmdlet Get-aduser # Load the Winforms assembly [reflection.assembly]::LoadWithPartialName( "System.Windows.Forms") # Create the form $form = New-Object Windows.Forms.Form $form_selectgroup = New-Object Windows.Forms.Form # Create the tabcontrol $tabcontrol = New-Object windows.Forms.TabControl $tabpage_ad = New-Object windows.Forms.TabPage $tabpage_sql = New-Object windows.Forms.TabPage $tabcontrol.width = 1150 $tabcontrol.Height = 540 #Set TabPages $tabpage_ad.Text = "Active Directory Users" $tabpage_sql.Text = "SQL Database Query Tool" #Set the dialog title $form.text = "Active Directory and SQL Database Query tool" $form.Width = 1150 $form.Height = 600 $form.FormBorderStyle = "FixedSingle" $form.ControlBox = $false # Create the label control and set text, size and location $label_lastname_ad = New-Object Windows.Forms.Label $label_lastname_ad.Location = New-Object Drawing.Point 10,50 $label_lastname_ad.Size = New-Object Drawing.Point 100,15 $label_lastname_ad.text = "Search lastname" $label_lastname_sql = New-Object Windows.Forms.Label $label_lastname_sql.Location = New-Object Drawing.Point 10,50 $label_lastname_sql.Size = New-Object Drawing.Point 100,15 $label_lastname_sql.text = "Search lastname" # Create TextBox and set text, size and location $textfield_lastname_ad = New-Object Windows.Forms.TextBox $textfield_lastname_ad.Location = New-Object Drawing.Point 110,45 $textfield_lastname_ad.Size = New-Object Drawing.Point 160,15 $textfield_lastname_sql = New-Object Windows.Forms.TextBox $textfield_lastname_sql.Location = New-Object Drawing.Point 110,45 $textfield_lastname_sql.Size = New-Object Drawing.Point 160,15 # create grids $ad_grid = New-Object Windows.Forms.DataGridview $ad_grid.DataBindings.DefaultDataSourceUpdateMode = 0 $ad_grid.Name = "grouplist" $ad_grid.DataMember = "" $ad_grid.TabIndex = 1 $ad_grid.Location = New-Object Drawing.Point 300,40 $ad_grid.Size = New-Object Drawing.Point 800,440 $ad_grid.readonly = $true $ad_grid.AutoSizeColumnsMode = 'AllCells' $ad_grid.SelectionMode = 'FullRowSelect' $ad_grid.MultiSelect = $false $ad_grid.RowHeadersVisible = $false $ad_grid.allowusertoordercolumns = $true $sql_grid = New-Object Windows.Forms.DataGridview $sql_grid.DataBindings.DefaultDataSourceUpdateMode = 0 $sql_grid.Name = "ad_contact_grid" $sql_grid.DataMember = "" $sql_grid.TabIndex = 1 $sql_grid.Location = New-Object Drawing.Point 300,40 $sql_grid.Size = New-Object Drawing.Point 800,440 $sql_grid.readonly = $true $sql_grid.AutoSizeColumnsMode = 'AllCells' $sql_grid.SelectionMode = 'FullRowSelect' $sql_grid.MultiSelect = $false $sql_grid.RowHeadersVisible = $false $sql_grid.allowusertoordercolumns = $true # Create Button and set text and location $button_exit = New-Object Windows.Forms.Button $button_exit.text = "Exit" $button_exit.Location = New-Object Drawing.Point 15,545 $button_searchad = New-Object Windows.Forms.Button $button_searchad.Location = New-Object Drawing.Point 10,70 $button_searchad.Size = New-Object Drawing.Point 100,23 $button_searchad.text = "Query AD" $button_searchsql = New-Object Windows.Forms.Button $button_searchsql.Location = New-Object Drawing.Point 10,70 $button_searchsql.Size = New-Object Drawing.Point 100,23 $button_searchsql.text = "Query SQL" # Set up event handler to extarct text from TextBox and display it on the Label. $button_searchad.add_click({ $grid = $ad_grid $lnquery = "*"+$textfield_lastname_ad.Text.ToString()+"*" search_contact_ad($lnquery) }) $button_searchsql.add_click({ $grid = $sql_grid search_contact_sql($textfield_lastname_sql.Text.ToString()) }) $textfield_lastname_ad.add_KeyPress({ If ($_.KeyChar -eq 13) { $grid = $ad_grid $lnquery = "*"+$textfield_lastname_ad.Text.ToString()+"*" search_contact_ad($lnquery) } }) $textfield_lastname_sql.add_KeyPress({ If ($_.KeyChar -eq 13) { $grid = $sql_grid search_contact_sql($textfield_lastname_sql.Text.ToString()) } }) $button_exit.add_click({ $form.Close() }) # Add the controls to the Form $form.Controls.Add($tabcontrol) $form.controls.add($button_exit) $tabcontrol.tabpages.add($tabpage_ad) $tabcontrol.tabpages.add($tabpage_sql) $tabpage_ad.controls.add($label_lastname_ad) $tabpage_ad.controls.add($textfield_lastname_ad) $tabpage_ad.controls.add($button_searchad) $tabpage_ad.controls.add($ad_grid) $tabpage_sql.controls.add($label_lastname_sql) $tabpage_sql.controls.add($textfield_lastname_sql) $tabpage_sql.controls.add($button_searchsql) $tabpage_sql.Controls.Add($sql_grid) $form.add_Load($OnLoadForm_UpdateGrid) function search_contact_ad([string]$lastname_str){ if ($lastname_str) { $array_ad = New-Object System.Collections.ArrayList $Script:procInfo = @(Get-ADUser -Filter {sn -like $lastname_str} -Properties sn,givenname,mail,displayname -SearchBase "dc=domain,dc=local" |sort-object -property sn |Select-Object givenname,sn,displayname,mail) $array_ad.AddRange($procInfo) $grid.DataSource = $array_ad $form.refresh() } else { [windows.forms.messagebox]::show('Please enter a lastname to search before clicking the button','Warning','OK',[Windows.Forms.MessageBoxIcon]::Warning) } } function search_contact_sql([string]$lastname_str){ if ($lastname_str) { $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server=DB_Server_Hostname;Database=master;Integrated Security=True" $SqlConnection.Open() $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = "select Lastname,Firstname,Username,CountryCode,Department,ManagerName,EmailAddress from DatabaseName ` where upper(LastName) like '%"+($lastname_str).toupper()+"%' ORDER BY LastName" $SqlCmd.Connection = $SqlConnection $reader = $SqlCmd.ExecuteReader() $myarray = @() while ($Reader.Read()) { $rows = New-Object System.Object $rows | Add-Member -type NoteProperty -name Lastname -Value $Reader.GetValue(0) $rows | Add-Member -type NoteProperty -name Firstname -Value $Reader.GetValue(1) $rows | Add-Member -type NoteProperty -name Username -Value $Reader.GetValue(2) $rows | Add-Member -type NoteProperty -name Office -Value $Reader.GetValue(3) $rows | Add-Member -type NoteProperty -name Department -Value $Reader.GetValue(4) $rows | Add-Member -type NoteProperty -name Manager -Value $Reader.GetValue(5) $rows | Add-Member -type NoteProperty -name Mail -Value $Reader.GetValue(6) $myarray += $rows } $array = New-Object System.Collections.ArrayList $Script:procInfo = @($myarray | Select Firstname,Lastname,Username,Office,Department,Manager,Mail) $array.AddRange($procInfo) $grid.DataSource = $array $form.refresh() $SqlConnection.Close() } else { [windows.forms.messagebox]::show('Please enter a username to copy before clicking the button','Warning','OK',[Windows.Forms.MessageBoxIcon]::Warning) } } # Display the dialog $form.ShowDialog()
If you have any problems, contact me ! |
Query tool GUI (Active Directory and SQL)