Графический интерфейс PowerShell — Функция в форме, которая не работает

#forms #powershell #user-interface

Вопрос:

в настоящее время я работаю над небольшим проектом графического интерфейса PowerShell.

У меня есть форма, в этой форме есть кнопка для вызова другой формы, которая предоставляет список с некоторыми элементами в нем. Пока все идет хорошо — я получаю результаты, как и ожидалось.

Теперь я отмечаю один из пунктов — нажимаю » ОК » — тогда он должен что-то сделать. И вот в чем моя проблема, она ничего не делает 😀 Ни ошибки, ни предупреждения, просто ничего. Если я протестирую с помощью узла записи «$($ListBox.SelectedItem)»-я получу выбранный элемент, как и ожидал. Но если вы хотите использовать его с get-adfsrelyingpartytrust-Name $ListBox.SelectedItem — ничего не произойдет. Если я выполняю функцию без остатка (так, чтобы появлялся только список), все работает так, как задумано O_o.

Код:

 function single_rpt{ $RPTForm = New-Object System.Windows.Forms.Form  $RPTForm.ClientSize = '400,200'  $RPTForm.Text = "Choose"  $RPTForm.BackColor = "#b2b2b2"  $RPTForm.AutoSize = $false  $RPTForm.StartPosition = 'CenterScreen'  $RPTForm.ControlBox = $true    $rptButton = New-Object System.Windows.Forms.Button  $rptButton.BackColor = "#ffffff"  $rptButton.Text = "OK"  $rptButton.Width = 90  $rptButton.Height = 30  $rptButton.Location = New-Object System.Drawing.Point(20,125)  $rptButton.Font = 'Microsoft Sans Serif,10'  $rptButton.ForeColor = "#000000"  $rptButton.UseVisualStyleBackColor = $true  $rptButton.DialogResult = 1      # Test List Box  $listBox = New-Object System.Windows.Forms.ListBox  $listBox.Location = New-Object System.Drawing.Point(20,50)  $listBox.Size = New-Object System.Drawing.Size(350,200)  $listBox.Height = 80    $RPTForm.Controls.AddRange(@($listBox,$rptButton))    $listboxArray = @()  $ADFS_RPTS = Get-AdfsRelyingPartyTrust  Foreach($rpt in $ADFS_RPTS)  {    #$Object = Add-Member -TypeName NoteProperty -Name Service -Value $service.Name  $listboxArray  = $rpt.Name  }   $listBox.Items.AddRange($listboxArray)  [void]$RPTForm.ShowDialog()     if($RPTForm.DialogResult -eq "OK")  {    Get-AdfsReylingPartyTrus -Name $listBox.SelectedItem    }     }   # Init PowerShell Gui  Add-Type -AssemblyName System.Windows.Forms   # Create Form with size, title and background color, etc.  $TESTForm = New-Object System.Windows.Forms.Form $TESTForm.ClientSize = '250,300' $TESTForm.Text = "TEST" $TESTForm.BackColor = "#ffffff" $TESTForm.AutoSize = $false $TESTForm.StartPosition = 'CenterScreen' $TESTForm.ControlBox = $true  $RPTSingle = New-Object System.Windows.Forms.Button $RPTSingle.BackColor = "#ffffff" $RPTSingle.Text = "RPTSingle" $RPTSingle.Width = 90 $RPTSingle.Height = 30 $RPTSingle.Location = New-Object System.Drawing.Point(75,125) $RPTSingle.Font = 'Microsoft Sans Serif,10' $RPTSingle.ForeColor = "#000000" $RPTSingle.UseVisualStyleBackColor = $true  $RPTSingle.Add_Click({single_rpt})   # Add a Cancel Button  $CancelButton = New-Object System.Windows.Forms.Button $CancelButton.BackColor = "#ffffff" $CancelButton.Text = "Cancel" $CancelButton.Width = 90 $CancelButton.Height = 30 $CancelButton.Location = New-Object System.Drawing.Point(75,250) $CancelButton.Font = 'Microsoft Sans Serif,10' $CancelButton.ForeColor = "#000000" $CancelButton.UseVisualStyleBackColor = $true $CancelButton.DialogResult = 2   $TESTForm.Controls.AddRange(@($RPTSingle,$CancelButton)) # Display the form  [void]$TESTForm.ShowDialog()   #------------------------------------#  

Комментарии:

1. Опечатка: Get-AdfsReylingPartyTrus отсутствует финал t . Должно быть Get-AdfsRelyingPartyTrust

2. Когда вы говорите «ничего не происходит», чего вы ожидаете ? Ваш код вызывает Get-AdfsReylingPartyTrust внутри single_rpt , но ничего не делает с результатом. Он будет записан в выходной поток функции, но обработчик событий, настроенный пользователем $RPTSingle.Add_Click({single_rpt} , просто проглотит его.

3. Слава Маклейтону! Это было то, чего мне не хватало — я ожидал, что информация о командлете get -. отображается в текущем узле Powershell.