Использование функции для заполнения текстового поля в Powershell - PullRequest
0 голосов
/ 10 ноября 2018

В настоящее время у меня есть скрипт, который запрашивает у нашей AD атрибут AD пользователя "Department".

Прямо сейчас, скрипт будет работать "успешно", но весь вывод для Textbox2 идет на консоль вместо TextBox2.

Если я изменю свою функцию Get-CCUsers на запрос без переменных, например Get-ADUser -Filter "Department -eq 19330" (мы используем числа для наших отделов), тогда вывод отобразится в TextBox2, как я хочу.

Как мне заставить мою функцию заполнять TextBox2?
Кстати, этот сценарий был выкован вместе с моим ограниченным пониманием, и здесь вполне могут быть лишние или бессмысленные строки.

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

$form = New-Object System.Windows.Forms.Form
$form.Text = 'Howard Center Profile Migration'
$form.Size = New-Object System.Drawing.Size(800,650)
$form.StartPosition = 'CenterScreen'

$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 enter the Cost Center # in the space below:'
$form.Controls.Add($label)

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(100,20)
$form.Controls.Add($textBox)

$RunButton = New-Object System.Windows.Forms.Button
$RunButton.Location = New-Object System.Drawing.Point(75,120)
$RunButton.Size = New-Object System.Drawing.Size(75,23)
$RunButton.Text = 'RUN'
#$RunButton.DialogResult = [System.Windows.Forms.DialogResult]::OK


<#$RunButton.Add_Click({
#add here code triggered by the event
   $TextBox2.Text = Get-Process | Format-Table -Property ProcessName, Id, CPU -AutoSize | Out-String
})
#>

$form.AcceptButton = $RunButton
$form.Controls.Add($RunButton)

$label2 = New-Object System.Windows.Forms.Label
$label2.Location = New-Object System.Drawing.Point(10,70)
$label2.Size = New-Object System.Drawing.Size(280,20)
$label2.Text = 'When you are ready click the Run button below'
$form.Controls.Add($label2)

$TextBox2 = New-Object system.windows.Forms.TextBox
$TextBox2.Text = ""
$TextBox2.Multiline = $true
$TextBox2.BackColor = "#013686"
$TextBox2.ScrollBars = "Both"
$TextBox2.Width = 750
$TextBox2.Height = 450
$TextBox2.location = new-object system.drawing.point(10,150)
$TextBox2.Font = "Microsoft Sans Serif,10"
$TextBox2.ForeColor = "#ffffff"



$Form.controls.Add($TextBox2)

$form.Topmost = $true

function Get-CCUsers {
Write-Host "The textbox text is $textbox.Text"
$dept = $textBox.Text
$deptUsers = Get-ADUser -Filter "Department -eq $dept"
ForEach ($user in $deptUsers) {
    IF ( ((get-aduser $user).enabled) -eq $True ) {
        $UHomeDir = (Get-ADUser $user -Properties HomeDirectory).HomeDirectory
        $UProfPath = (Get-ADUser $user -Properties ProfilePath).ProfilePath
        Write-Host "$user, $UHomeDir, $UProfPath"
        }
    }
}

$RunButton.Add_Click({
    $TextBox2.Text = Get-CCUsers
        })

$TextBox2.Add_TextChanged({
    $TextBox2.SelectionStart = $TextBox2.Text.Length
    $TextBox2.ScrollToCaret()
    })

$form.Add_Shown({$Form.Update()})
$result = $form.ShowDialog()

$global:x = $textBox.Text
# $x


# if ($result -eq [System.Windows.Forms.DialogResult]::OK)
#{




#}

1 Ответ

0 голосов
/ 10 ноября 2018

Я заставил ваш скрипт работать, изменив функцию 'Get-CCUSers'

function Get-CCUsers {
Write-Host "The textbox text is $textbox.Text"
$dept = $textBox.Text
$deptUsers = Get-ADUser -Filter "Department -eq '$dept'"
$res = @()
ForEach ($user in $deptUsers) {
    IF ( ((get-aduser $user).enabled) -eq $True ) {
        $UHomeDir = (Get-ADUser $user -Properties HomeDirectory).HomeDirectory
        $UProfPath = (Get-ADUser $user -Properties ProfilePath).ProfilePath
        $res += "$user, $UHomeDir, $UProfPath"
        }
    }
return $res
}

Короче говоря:

  1. Я удалил Write-Host (вывод был фактически перенаправлен на стандартный вывод)
  2. Я добавил $ res в функцию, инициализированную как массив
  3. В цикле ForEach результаты добавляются в виде элементов в массиве
  4. Функция $ res возвращается функцией, а затем используется $ RunButton
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...