Powershell GUI. Выбор элемента из динамического списка ListBox с последующей выгрузкой информации о пользователе из Active Directory
Добрый день уважаемые пользователи форума. Прошу помочь мне в следующем вопросе. Я пытаюсь создать приложение с графическим интерфейсом в Powershell GUI. Так как я новичок в программировании и знаний у меня недостаточно решил за помощью обратиться на форум. Суть приложения в поиске по ФИО в учетных записях Active Directory нужной учетной записи сотрудника и просмотру даты смены пароля данной учетной записи. У меня есть готовый код который работает при вводе логина учетной записи на Английском языке. При этом я хочу реализовать поиск на Русском языке. Код который я привожу ниже производит поиск на русском языке но только в текстовом виде отображает список учетных записей по ФИО, данный текст можно только скопировать. Прошу подсказать мне как можно запрограммировать программу что бы она производила поиск не в виде текста ФИО, а в виде элементов на ФИО которого можно нажать курсором мышки и получить результат. Скриншот программы прилагаю https://i.stack.imgur.com/GJ5qP.png . Заранее благодарю за помощь.
$Form = New-Object System.Windows.Forms.Form
$Form.Size = New-Object System.Drawing.Size(460,350) # Размер формы
$Form.Text ="Pass info"
$Form.AutoSize = $false
$Form.MaximizeBox = $false # кнопка развернуть программу
$Form.MinimizeBox = $true # кнопка свернуть программу
$Form.BackColor = "#c08888" # Цвет формы
$Form.ShowIcon = $true # Включить иконку(левый верхний угол) $true , отключить иконку $false
$Form.SizeGripStyle = [System.Windows.Forms.SizeGripStyle]::Hide # Запретить растягивание формы
#$Form.SizeGripStyle = "Hide"
$Form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D # Запретить растягивание формы _2
$Form.WindowState = "Normal"
$Form.StartPosition = "CenterScreen" #loads the window in the center of the screen
$Form.Opacity = 1.0 # Прозрачность формы(менее 1 прозрачная форма)
$Form.TopMost = $false # Поверх других окон
# тут получить код иконки в левом верхнем углу программы:
# https://onlineimagetools.com/convert-image-to-base64
# вставить код сюда: $iconBase64 = '' между кавычек.
$iconBase64 = ''
$iconBytes = [Convert]::FromBase64String($iconBase64)
$stream = New-Object IO.MemoryStream($iconBytes, 0, $iconBytes.Length)
$stream.Write($iconBytes, 0, $iconBytes.Length);
$iconImage = [System.Drawing.Image]::FromStream($stream, $true)
$Form.Icon = [System.Drawing.Icon]::FromHandle((New-Object System.Drawing.Bitmap -Argument $stream).GetHIcon())
###################################### Тут конец иконки.......
########### Старт функции:
function Info {
$wks=$InputBox.text;
Write-Host $wks
$regex1 = "[^-a-zA-Z0-9_#.!@]+"
$regex2 = "[^-а-яА-Я0-9_#.!@]+"
If($wks -match $regex2) {
$Result1=Get-ADUser -identity $wks -Properties * | select CN -ExpandProperty CN
$outputBox.text=$Result1
$Result2=Get-ADUser -identity $wks -Properties * | select PasswordLastset -ExpandProperty PasswordLastset
$outputBox2.text=$Result2
}
If($wks -match $regex1) {
$wks2 = "$wks*"
Write-Host $wks2
$Result3=Get-AdUser -Filter 'name -Like $wks2' | Select Name -expandproperty Name| Sort Name | fl | out-string
Write-Host $Result3
#$Result3 = ($Result3 -replace ' ','_')
#$Result3 = $Result3 -split '_',2 -join ' '
$ListBox.text = $Result3
}
}
########### Тут конец функции.
############################################## Start text fields
#### Гр. выделение меток 2 и 3
$groupBox = New-Object System.Windows.Forms.GroupBox
$groupBox.Location = New-Object System.Drawing.Size(10,230)
$groupBox.size = New-Object System.Drawing.Size(280,80)
$groupBox.text = "Info:"
$Form.Controls.Add($groupBox)
$FormLabel1 = New-Object System.Windows.Forms.Label
$FormLabel1.Text = "User AD:"
$FormLabel1.ForeColor = "#3009f1"
$FormLabel1.Font = "Microsoft Sans Serif,8"
$FormLabel1.Location = New-Object System.Drawing.Point(10,10)
$FormLabel1.AutoSize = $true
$Form.Controls.Add($FormLabel1)
$FormLabel2 = New-Object System.Windows.Forms.Label
$FormLabel2.Text = "ФИО:"
$FormLabel2.Location = New-Object System.Drawing.Point(10,25)
$FormLabel2.ForeColor = "#3009f1"
$FormLabel2.Font = "Microsoft Sans Serif,8"
$FormLabel2.AutoSize = $true
#$Form.Controls.Add($FormLabel2) # Метка явл. частью общ. Form
$groupBox.Controls.Add($FormLabel2) # Метка явл. частью groupBox
$FormLabel3 = New-Object System.Windows.Forms.Label
$FormLabel3.Text = "Дата:"
$FormLabel3.Location = New-Object System.Drawing.Point(10,47)
$FormLabel3.ForeColor = "#3009f1"
$FormLabel3.Font = "Microsoft Sans Serif,8"
$FormLabel3.AutoSize = $true
#$Form.Controls.Add($FormLabel3) # Метка явл. частью общ. Form
$groupBox.Controls.Add($FormLabel3) # Метка явл. частью groupBox
############################################ InputBox #########################################
$InputBox = New-Object System.Windows.Forms.TextBox
$InputBox.Location = New-Object System.Drawing.Size(65,5)
$InputBox.Size = New-Object System.Drawing.Size(150,20)
$Form.Controls.Add($InputBox)
$outputBox = New-Object System.Windows.Forms.TextBox
$outputBox.Location = New-Object System.Drawing.Size(80,20)
$outputBox.Size = New-Object System.Drawing.Size(180,20)
$outputBox.ReadOnly = $True # Активировать поле только для чтения (нельзя поменять, удалить, дописать информацию в ячейке)
$groupBox.Controls.Add($outputBox)
$outputBox2 = New-Object System.Windows.Forms.TextBox
$outputBox2.Location = New-Object System.Drawing.Size(80,42)
$outputBox2.Size = New-Object System.Drawing.Size(180,42)
$outputBox2.ReadOnly = $True # Активировать поле только для чтения (нельзя поменять, удалить, дописать информацию в ячейке)
$groupBox.Controls.Add($outputBox2)
############################################## Список
$ListBox = New-Object System.Windows.Forms.TextBox
$ListBox.Location = New-Object System.Drawing.Size(65,30)
$ListBox.Size = New-Object System.Drawing.Size(220,200)
$ListBox.MultiLine = $True #declaring the text box as multi-line
$ListBox.AcceptsReturn = $true
$ListBox.ScrollBars = "Vertical"
$ListBox.AcceptsTab = $true
$ListBox.WordWrap = $True
$ListBox.ReadOnly = $True
$Form.Controls.Add($ListBox)
############################################## Список конец
############################################## поиск на Русском и на Английском
$regex1 = "[^-a-zA-Z0-9_#.!@]+"
$regex2 = "[^-а-яА-Я0-9_#.!@]+"
$TestName = "Mouse" # Mouse или мышь
If($TestName -match $regex1){echo "English '$TestName'"}
If($TestName -match $regex2){echo "Русский '$TestName'"}
get-aduser -filter 'name -like "*" ' | select name -expandproperty name
############################################## поиск на Русском и на Английском конец
################ Тут кнопка
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(310,20)
$Button.Size = New-Object System.Drawing.Size(110,80)
$Button.Text = "Загрузить данные"
$Button.BackColor = "#d7f705"
$Button.Add_Click({Info})
$Form.Controls.Add($Button)
################ тут конец кнопки....
################ Привязка кнопки в программе к клавише Enter на клавиатуре ....
$Form.KeyPreview = $True
$Form.Add_KeyDown({if ($_.KeyCode -eq "Enter")
{
# if enter, perform click
$Button.PerformClick()
}
})
################ Конец кода привязки кнопки ....
$Form.Add_Shown({$Form.Activate()})
[void] $Form.ShowDialog()```