2017-06-27 4 views
0

Ich arbeite an einer PowerShell-Anwendung, die eine Benutzer-ID als Eingabe aus einem Textfeld nehmen, dann ActiveDirectory durchsuchen und drei Felder zurückgeben soll; aber jedes Mal wenn ich versuche, es zu verwenden, erhalte ich folgende Fehlermeldung:Abrufen von Eingaben aus 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 

Hier ist der Code für meine GUI und Suchfunktion:

[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 

ich die Lösungen in jeder ähnlichen Frage geprüft habe ich kann auf dem Stapel vergeblich finden. Ich habe auch versucht, die Variable $ x global zu deklarieren, indem ich direkt $ input.text für die Suchfunktion aufruft und $ x in eine Zeichenkette umwandelt, von denen alle denselben Fehler zurückgeben. Ausführen von PowerShell Version 5. Wie immer wird jede Hilfe sehr geschätzt.

+0

Ihre beiden Tasten schlagen fehl. Ich würde damit anfangen. – TheIncorrigible1

+0

@TessellatingHeckler, das war das Problem. Wenn du das als Antwort postest, werde ich es gerne annehmen :) – Cameron

Antwort

1

$Input ein spezieller Variable Name ist - siehe help about_Automatic_Variables - und nicht das tun, was Sie erwarten, wenn Sie es in Ihrem {} Skript verwenden, wird es verweisen Eingang Script (in diesem Fall nichts), statt Ihrer inputbox.

Versuchen Sie, es in etwas anderes umzubenennen.

Verwandte Themen