2017-06-27 2 views
0

Je travaille sur une application PowerShell qui doit prendre un identifiant d'utilisateur en entrée d'une zone de texte, puis rechercher dans ActiveDirectory et retourner trois champs; Cependant, chaque fois que j'essaie de l'utiliser, je reçois l'erreur suivante:Récupérer l'entrée à partir de PowerShell TextBox

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 

Voici le code pour mon interface graphique et la fonction recherche:

[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 

J'ai vérifié les solutions à toutes les questions semblables I peut trouver sur la pile en vain. J'ai également essayé de déclarer globalement la variable $ x, en appelant directement $ input.text pour la fonction de recherche, et en convertissant $ x en une chaîne, qui retourne la même erreur. Exécution de PowerShell version 5. Comme toujours, toute aide est très appréciée.

+0

Vos deux boutons échouent. Je commencerais par ça. – TheIncorrigible1

+0

@TessellatingHeckler, c'était le problème. Si vous publiez cela comme une réponse, je vais l'accepter avec plaisir :) – Cameron

Répondre

1

$Input est un nom de variable spéciale - voir help about_Automatic_Variables - et ne fera pas ce que vous attendez lorsque vous l'utilisez dans votre {} scriptblock, il fera référence à l'entrée ScriptBlock (dans ce cas, rien), au lieu de votre inputbox.

Essayez de le renommer en autre chose.