从PowerShell TextBox检索输入

时间:2017-06-27 21:24:20

标签: powershell active-directory powershell-v5.0

我正在开发一个PowerShell应用程序,它应该从文本框中输入用户ID作为输入,然后搜索ActiveDirectory并返回三个字段;但是,每次我尝试使用它时,都会收到以下错误:

Get-ADUser : Cannot validate argument on parameter 'Identity'. The argument is null. Provide a valid value for the argument, and then try running the command again.
At C:\Path\cc-lookup-gui.ps1:40 char:21
+     $y = Get-ADUser $script:x -Properties cC
+                     ~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-ADUser], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADUser

以下是我的GUI和搜索功能的代码:

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")|Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")|Out-Null
$net = New-Object -ComObject Wscript.Network


$form = New-Object System.Windows.Forms.Form
$form.Width = 525
$form.Height = 350
$form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D
$form.Text = "CC Lookup"
$form.MaximumSize = New-Object System.Drawing.Size(525,350)
$form.StartPosition = "centerscreen"
$form.KeyPreview = $true
$form.Add_KeyDown({if($_.KeyCode -eq "Enter"){$script:x=$input.Text;Search}})
$form.Add_KeyDown({if($_.KeyCode -eq "Escape"){$form.Close()}})

$input = new-object System.Windows.Forms.TextBox
$input.maxLength = 6
$input.Location = New-Object System.Drawing.Size(200,75)


add-type -assemblyName System.Windows.Forms
$label1 = New-Object System.Windows.Forms.Label
$label1.Location = New-Object System.Drawing.Size(200,25)
$label1.AutoSize = $true
$label1.Text = "Enter User ID:"

$Button1 = new-object System.Windows.Forms.Button
$Button1.Location = New-Object System.Drawing.Size(100,132)
$Button1.Size = New-Object System.Drawing.Size(80,20)
$Button1.Text = "Search"
$Button1.Add_Click({$script:x=$input.Text;Search})

$button2 = New-Object System.Windows.Forms.Button
$button2.Location = New-Object System.Drawing.Size(300,132)
$button2.Text = "Clear"
$button2.Add_Click({Clears})

function Search{
    $y = Get-ADUser $script:x -Properties cC
    $output = $y.samAccountName + '|' + $y.CN + '|' + $y.cC
    Add-Type -AssemblyName System.Windows.Forms
    $label = New-Object System.Windows.Forms.Label
    $label.Text = $Output
    $label.AutoSize = $true
    $label.Location = New-Object System.Drawing.Size(200,100)
    $form.controls.add($label)
}

function Clears{
    $label.Text = $null
    $input.Text = $null
}

$form.Controls.Add($label1)
$form.Controls.Add($button2)
$form.Controls.Add($input)
$form.Controls.Add($Button1)
$form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()
$x = $input.Text

我尝试全局声明变量$x,直接为搜索函数调用$input.text,并将$x转换为字符串,所有这些都返回相同的错误。我正在运行PowerShell版本5。

1 个答案:

答案 0 :(得分:2)

$Input是一个特殊的变量名称 - 请参阅help about_Automatic_Variables - 当您在{}脚本块中使用它时,它将无法达到您的预期,它将引用脚本块输入(在这种情况,没有),而不是你的输入框。

尝试将其重命名为其他内容。