none
два значения в одном Combobox при загрузке списка из AD RRS feed

  • Вопрос

  • Добрый день. Такая задача: пишу небольшой скрипт с интерфейсом на 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()

    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()

    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()

    15 февраля 2019 г. 14:02
  • Бинго. Спасибо большое.
    18 февраля 2019 г. 4:14
  • таки бинго или нет?

    второй вариант(первый это просто подобный пример) именно с именем OU в комбобоксе и и выводом DN в консоль у меня лично работает.

    18 февраля 2019 г. 8:43