@dinizzzo
Администратор Linux, Windows

Combobox. Свойства ValueMember и DisplayMember в powershell?

Есть набросок кода, простой вывод контейнеров из AD:

cls
[array]$test  = Get-ADOrganizationalUnit -filter * -SearchBase "dc=DOMAIN,dc=local"

Function funMainForm {
    $Global:main_form = New-Object System.Windows.Forms.Form
    $main_form.Text ='Окно'
    $main_form.Width = 600
    $main_form.Height = 480
    $main_form.AutoSize = $true

    $Global:cmbTest = New-Object System.Windows.Forms.ComboBox
    $cmbTest.Width = 620
    $cmbTest.DisplayMember = "name"
    $cmbTest.ValueMember = "DistinguishedName"
    $cmbTest.DataSource = $test
    $cmbTest.Location = New-Object System.Drawing.Point(10,50)
    $main_form.Controls.Add($cmbTest)

    $main_form.ShowDialog()
}

funMainForm


Необходимо, чтобы в комбобоксе отображалось имя контейнера, но выводится его путь (как будто свойства ValueMember и DisplayMember не заданы вовсе). Может кто-нибудь подсказать, как правильно работать с ValueMember и DisplayMember и в чем моя ошибка?
  • Вопрос задан
  • 1506 просмотров
Решения вопроса 1
@dinizzzo Автор вопроса
Администратор Linux, Windows
В общем понял в чем проблема. ValueMember и DisplayMember работают, если в $cmbTest.DataSource подавать данные типа DataTable, а стандартный вывод в powershell имеет тип Array. Т.к. встроенных способов преобразовать Array в DataTable нет, использовал следующую функцию:
https://gallery.technet.microsoft.com/scriptcenter...
Соответственно в своем коде изменил первую строку на:
[System.Data.datatable]$test = Get-ADOrganizationalUnit -filter * -SearchBase "dc=DOMAIN,dc=local" | Out-DataTable
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Sumor
Не слишком знаком с PowerShell, но исходя из общих соображений DisplayMember - это свойство, которое выводится в комбобокс вместо ToString(). ValueMember - это название свойства, которое можно быстро получить через комбобокс не делая дополнительные действия. Например, SelectedValue сразу выдаст ValueMember выбранного объекта.
Есть подозрение, что названия свойств чувствительны к регистру. Попробуйте Name и distinguishedName
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы