1

I am working on a PowerShell application which should take a user id as input from a text box, then search ActiveDirectory and return three fields; however, every time I try to use it I receive the following error:

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

Here is the code for my GUI and search function:

[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

I have tried declaring the variable $x globally, directly calling $input.text for the search function, and converting $x into a string, all of which return this same error. I'm running PowerShell version 5.

2
  • Both of your buttons fail. I'd start with that. Commented Jun 27, 2017 at 21:42
  • @TessellatingHeckler, that was the issue. If you post that as an answer I will gladly accept it :) Commented Jun 28, 2017 at 14:16

1 Answer 1

2

$Input is a special variable name - see help about_Automatic_Variables - and won't do what you expect when you use it in your {} scriptblock, it will refer to scriptblock input (in this case, nothing), instead of your inputbox.

Try renaming it to something else.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.