Лучший отвечающий
два значения в одном Combobox при загрузке списка из AD

Вопрос
-
Добрый день. Такая задача: пишу небольшой скрипт с интерфейсом на system.windows.forms rдля пользователя, чтоб он сам заводил новых сотрудников в AD.
Логика следующая: есть выпадающее меню, в меню список OU (подгружаются из AD через Get-ADOrganizationalUnit), выбираешь нужную OU-шку, она передается в переменную, переменная уходит в конечный запрос New-ADUser. Все вроде ок, но есть проблема. Использую следующий код:
$OU = Get-ADOrganizationalUnit -SearchBase "OU=All_Users,DC=company,DC=local" -Filter * | Select-Object -Property Name,DistinguishedName
$ComboBox_OU = New-Object System.Windows.Forms.ComboBox
$ComboBox_OU.DataSource = $OU
$ComboBox_OU.Location = New-Object System.Drawing.Point(5,30)
$ComboBox_OU.Size = New-Object System.Drawing.Size(500,20)
$ComboBox_OU.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList
$ComboBox_OU.add_SelectedIndexChanged({$Global:User_OU = $ComboBox_OU.SelectedItem.DistinguishedName})
$main_form.Controls.Add($ComboBox_OU)он выдает в форме абсолютно нечитабельную для рядового пользователя конструкцию вида {@Name=Office Kirov;DistinguishedName=OU=Киров,бла бла бла} - ну в общем мне-то норм, а вот кадровик слегка удивилась.
Если я меняю $ComboBox_OU.SelectedItem.DistinguishedName на $ComboBox_OU.SelectedItem.Name - отображение читаемое, но в итоговый скрипт идет просто имя OU-шки, и он соответственно не отрабатывает.
Самое печальное, что есть еще два таких списка - для выбора руководителя нового сотрудника и выбора группы безопасности по умолчанию для нового сотрудника.
Вопрос в следующем - как можно придать конструкции читаемость и одновременно функциональность? Т.е. пользователь выбирает в выпадающем списке читаемое имя OU-шки, а в запрос идет полноценное AD имя по стандарту?
Заранее спасибо за уделенное время и внимание.
15 февраля 2019 г. 11:43
Ответы
-
Add-Type -AssemblyName System.Windows.Forms $form1=New-Object System.Windows.Forms.Form $form1.StartPosition='CenterScreen' $OU = [collections.arraylist]@(Get-ADOrganizationalUnit -SearchBase "DC=contoso,DC=local" -Filter * |Select-Object -Property Name,DistinguishedName) $ComboBox_OU = New-Object System.Windows.Forms.ComboBox $ComboBox_OU.add_SelectedIndexChanged({write-host $ComboBox_OU.SelectedItem.DistinguishedName}) $Combobox_OU.ValueMember='DistinguishedName' $Combobox_OU.DisplayMember='Name' $ComboBox_OU.DataSource = $OU $ComboBox_OU.Location = New-Object System.Drawing.Point(5,30) $ComboBox_OU.Size = New-Object System.Drawing.Size(500,20) $ComboBox_OU.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList $form1.Controls.Add($ComboBox_OU) $form1.ShowDialog()
- Предложено в качестве ответа Alexander RusinovModerator 16 февраля 2019 г. 19:50
- Отменено предложение в качестве ответа Сергей Леонов Ктулху 2-ой 18 февраля 2019 г. 4:14
- Помечено в качестве ответа KazunEditor 24 февраля 2019 г. 16:06
15 февраля 2019 г. 14:02
Все ответы
-
Add-Type -AssemblyName System.Windows.Forms $form1=New-Object System.Windows.Forms.Form $form1.StartPosition='CenterScreen' $combobox=New-Object System.Windows.Forms.ComboBox $combobox.add_SelectedIndexChanged({Write-Host $combobox.SelectedItem.Value}) $items=[collections.arraylist]@( [pscustomobject]@{Name='Today';Value=[datetime]::Today} [pscustomobject]@{ Name = 'Yesterday'; Value = [datetime]::Today.AddDays(-1) } [pscustomobject]@{ Name = 'Tomorrow'; Value = [datetime]::Today.AddDays(1) } ) $combobox.DataSource=$items $combobox.DisplayMember='Name' $form1.Controls.Add($combobox) $form1.ShowDialog()
- Предложено в качестве ответа Alexander RusinovModerator 16 февраля 2019 г. 19:51
15 февраля 2019 г. 12:43 -
Add-Type -AssemblyName System.Windows.Forms $form1=New-Object System.Windows.Forms.Form $form1.StartPosition='CenterScreen' $OU = [collections.arraylist]@(Get-ADOrganizationalUnit -SearchBase "DC=contoso,DC=local" -Filter * |Select-Object -Property Name,DistinguishedName) $ComboBox_OU = New-Object System.Windows.Forms.ComboBox $ComboBox_OU.add_SelectedIndexChanged({write-host $ComboBox_OU.SelectedItem.DistinguishedName}) $Combobox_OU.ValueMember='DistinguishedName' $Combobox_OU.DisplayMember='Name' $ComboBox_OU.DataSource = $OU $ComboBox_OU.Location = New-Object System.Drawing.Point(5,30) $ComboBox_OU.Size = New-Object System.Drawing.Size(500,20) $ComboBox_OU.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList $form1.Controls.Add($ComboBox_OU) $form1.ShowDialog()
- Предложено в качестве ответа Alexander RusinovModerator 16 февраля 2019 г. 19:50
- Отменено предложение в качестве ответа Сергей Леонов Ктулху 2-ой 18 февраля 2019 г. 4:14
- Помечено в качестве ответа KazunEditor 24 февраля 2019 г. 16:06
15 февраля 2019 г. 14:02 -
Бинго. Спасибо большое.18 февраля 2019 г. 4:14
-
таки бинго или нет?
второй вариант(первый это просто подобный пример) именно с именем OU в комбобоксе и и выводом DN в консоль у меня лично работает.
18 февраля 2019 г. 8:43