Windows Forms в Powershell, выберите из нескольких списков / блоков - PullRequest
0 голосов
/ 11 декабря 2018

Моя первая попытка использования форм, я пишу небольшую утилиту для службы поддержки, чтобы выбрать GPO и домашние диски для новых пользователей.Он использует два ListView и один Listbox.Я заполнил форму, но не знаю, как разрешить выделение / выделение одного элемента из каждого списка / списка одновременно - максимум, что я могу получить - это один список и список - если я выберу элемент из нижнего поляверхняя часть больше не подсвечивается:

enter image description here

Может кто-нибудь указать мне правильное направление, пожалуйста?Поиски, которые я использую, дают возможность выбрать несколько из одного списка / представления.

Код:

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# Basic form setup

$form = New-Object System.Windows.Forms.Form
$form.Text = 'NSS New User Setup'
$form.Size = New-Object System.Drawing.Size(600,600)
$form.StartPosition = 'CenterScreen'
$form.FormBorderStyle = 'Fixed3D'
$form.MaximizeBox = $false

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(200,530)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(325,530)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = 'Cancel'
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)

$label1 = New-Object System.Windows.Forms.Label
$label1.Location = New-Object System.Drawing.Point(310,20)
$label1.Size = New-Object System.Drawing.Size(280,20)
$label1.Text = 'Select user GPO group for drives and settings'
$form.Controls.Add($label1)

$label2 = New-Object System.Windows.Forms.Label
$label2.Location = New-Object System.Drawing.Point(10,250)
$label2.Size = New-Object System.Drawing.Size(280,20)
$label2.Text = 'Select user Home Drive location:'
$form.Controls.Add($label2)

$label3 = New-Object System.Windows.Forms.Label
$label3.Location = New-Object System.Drawing.Point(10,20)
$label3.Size = New-Object System.Drawing.Size(210,20)
$label3.Text = 'Enter user name/UID and click "Search"'
$form.Controls.Add($label3)

$label4 = New-Object System.Windows.Forms.Label
$label4.Location = New-Object System.Drawing.Point(10,65)
$label4.Size = New-Object System.Drawing.Size(210,20)
$label4.Text = 'Select User'
$form.Controls.Add($label4)

$label5 = New-Object System.Windows.Forms.Label
$label5.Location = New-Object System.Drawing.Point(10,480)
$label5.Size = New-Object System.Drawing.Size(210,20)
$label5.Text = 'Current Settings:'
$form.Controls.Add($label5)

# List of GPOs

$listBox = New-Object System.Windows.Forms.ListBox
$listBox.Location = New-Object System.Drawing.Point(310,40)
$listBox.Size = New-Object System.Drawing.Size(260,20)
$listBox.Height = 200
Get-ADGroup -Filter {name -like "*GPO Drives*"} | Sort Name | ForEach {
    [void] $listBox.Items.Add($_.Name)
}

$form.Controls.Add($listBox)

# List of User/UIDs

$UIDlist = New-Object System.Windows.Forms.ListView
$UIDlist.View = 'Details'
$UIDlist.Location = New-Object System.Drawing.Point(10,85)
$UIDlist.Size = New-Object System.Drawing.Size(285,20)
$UIDlist.Height = 155
$UIDlist.Columns.Add('SamAccountName') | Out-Null
$UIDlist.Columns.Add('Name') | Out-Null
$UIDlist.FullRowSelect = $true
$UIDlist.AutoResizeColumns([System.Windows.Forms.ColumnHeaderAutoResizeStyle]::HeaderSize)

$form.Controls.Add($UIDlist)

# List of Home Drive locations

$listView = New-Object System.Windows.Forms.ListView
$listView.View = 'Details'
$listView.Location = New-Object System.Drawing.Point(10,270)
$listView.Size = New-Object System.Drawing.Size(560,15)
$listView.Height = 200
$listView.Columns.Add('HomePath') | Out-Null
$listView.Columns.Add('Usage') | Out-Null
$listView.Columns.Add('Description') | Out-Null

$ValidNewHomes | ForEach {
    $Entry = New-Object System.Windows.Forms.ListViewItem($_.HomePath)
    $Entry.SubItems.Add($_.Usage) | Out-Null
    $Entry.SubItems.Add($_.Description) | Out-Null
    $listView.Items.Add($Entry) | Out-Null
}


$listView.AutoResizeColumns([System.Windows.Forms.ColumnHeaderAutoResizeStyle]::ColumnContent)

$form.Controls.Add($listView)

# Add Entry field for userID search

$UIDentry = New-Object System.Windows.Forms.Textbox
$UIDEntry.Location='10,40'
$UIDentry.Size = '200,1000'
$form.Controls.Add($UIDEntry)


$SearchButton = New-Object System.Windows.Forms.Button
$SearchButton.Location = '220,38'
$SearchButton.Size = '75,23'
$SearchButton.Text = 'Search'
# Event handler to handle the button being clicked
$SearchButton.Add_Click({
    $UIDlist.Items.Clear()
    $RequestedUID = $UIDentry.Text
    $PossibleUserList = Validate-User $RequestedUID
    $PossibleUserList | ForEach {
        $UIDresult = New-Object System.Windows.Forms.ListViewItem($_.SamAccountName)
        $UIDresult.SubItems.Add($_.Name) | Out-Null
        $UIDlist.Items.Add($UIDresult) | Out-Null
        $UIDlist.Columns[1].([System.Windows.Forms.ColumnHeaderAutoResizeStyle]::ColumnContent)
    }
})
# $form.Button = $SearchButton
$form.Controls.Add($SearchButton)


$form.Topmost = $true

$result = $form.ShowDialog()

#

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...