Välj objekt från en listruta

Använd Windows PowerShell version 3.0 och senare för att skapa en dialogruta där användarna kan välja objekt från en listrutekontroll.

Skapa en listrruta och välj objekt från den

Kopiera och klistra in följande i Windows PowerShell ISE och spara det sedan som ett Windows PowerShell skript (.ps1).

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

$form = New-Object System.Windows.Forms.Form
$form.Text = 'Select a Computer'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(75,120)
$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(150,120)
$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)

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Please select a computer:'
$form.Controls.Add($label)

$listBox = New-Object System.Windows.Forms.ListBox
$listBox.Location = New-Object System.Drawing.Point(10,40)
$listBox.Size = New-Object System.Drawing.Size(260,20)
$listBox.Height = 80

[void] $listBox.Items.Add('atl-dc-001')
[void] $listBox.Items.Add('atl-dc-002')
[void] $listBox.Items.Add('atl-dc-003')
[void] $listBox.Items.Add('atl-dc-004')
[void] $listBox.Items.Add('atl-dc-005')
[void] $listBox.Items.Add('atl-dc-006')
[void] $listBox.Items.Add('atl-dc-007')

$form.Controls.Add($listBox)

$form.Topmost = $true

$result = $form.ShowDialog()

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $listBox.SelectedItem
    $x
}

Skriptet börjar med att läsa in .NET Framework klasser: System.Drawing och System.Windows. Formulär. Sedan startar du en ny instans av .NET Framework klassen System.Windows. Forms.Form; som innehåller ett tomt formulär eller fönster där du kan börja lägga till kontroller.

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

När du har skapat en instans av klassen Form tilldelar du värden till tre egenskaper för den här klassen.

  • Text. Detta blir fönstrets rubrik.

  • Storlek. Det här är formulärets storlek i bildpunkter. Föregående skript skapar ett formulär som är 300 bildpunkter brett och 200 bildpunkter högt.

  • StartingPosition. Den här valfria egenskapen är inställd på CenterScreen i föregående skript. Om du inte lägger till den här Windows väljer en plats när formuläret öppnas. Genom att ange StartingPosition till CenterScreen visas formuläret automatiskt i mitten av skärmen varje gång det läses in.

$form.Text = 'Select a Computer'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

Skapa sedan en OK-knapp för formuläret. Ange storlek och beteende för knappen OK. I det här exemplet är knapppositionen 120 bildpunkter från formulärets övre kant och 75 bildpunkter från den vänstra kanten. Knapphöjden är 23 bildpunkter, medan knapplängden är 75 bildpunkter. Skriptet använder fördefinierade Windows Forms-typer för att fastställa knappbeteenden.

$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(75,120)
$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)

På samma sätt skapar du en Avbryt-knapp. Knappen Avbryt är 120 bildpunkter uppifrån, men 150 bildpunkter från fönstrets vänstra kant.

$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(150,120)
$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)

Ange sedan etiketttext i fönstret som beskriver den information som du vill att användarna ska ange. I det här fallet vill du att användarna ska välja en dator.

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Please select a computer:'
$form.Controls.Add($label)

Lägg till kontrollen (i det här fallet en listruta) där användarna kan ange den information som du har beskrivit i etiketttexten. Det finns många andra kontroller som du kan använda förutom listrutor. Fler kontroller finns i System.Windows. Namnområde för formulär.

$listBox = New-Object System.Windows.Forms.ListBox
$listBox.Location = New-Object System.Drawing.Point(10,40)
$listBox.Size = New-Object System.Drawing.Size(260,20)
$listBox.Height = 80

I nästa avsnitt anger du de värden som du vill att listrutan ska visa för användarna.

Anteckning

Listrutan som skapas med det här skriptet tillåter endast ett val. Om du vill skapa en listrrutor som tillåter flera val anger du ett värde för egenskapen SelectionMode, ungefär så här: $listBox.SelectionMode = 'MultiExtended' . Mer information finns i Listrutor med flera val.

[void] $listBox.Items.Add('atl-dc-001')
[void] $listBox.Items.Add('atl-dc-002')
[void] $listBox.Items.Add('atl-dc-003')
[void] $listBox.Items.Add('atl-dc-004')
[void] $listBox.Items.Add('atl-dc-005')
[void] $listBox.Items.Add('atl-dc-006')
[void] $listBox.Items.Add('atl-dc-007')

Lägg till listrutekontrollen i formuläret och instruera Windows att öppna formuläret ovanpå andra fönster och dialogrutor när det öppnas.

$form.Controls.Add($listBox)
$form.Topmost = $true

Lägg till följande kodrad för att visa formuläret i Windows.

$result = $form.ShowDialog()

Slutligen instruerar koden i blocket If Windows vad som ska göra med formuläret när användarna har valt ett alternativ i listrutan och klickar sedan på OK eller trycker på Retur.

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $listBox.SelectedItem
    $x
}

Se även