1

あなたのような経験豊富な人にとってはおそらく簡単な質問ですが、ドロップダウンメニューでユーザー名のライブActive Directory検索を実行するには、選択した結果を取得して値をに渡すにはどうすればよいですか?$var

これが私のfromと2つのドロップダウンメニューです。managerドロップダウンで、入力した文字列に基づいてActiveDirectoryを検索します。つまり、ドロップダウンアイテムを入力Macdonaldすると、AD内のすべてのマクドナルドの名前または名前が表示されます。

function GenerateForm {

[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null

$form1 = New-Object System.Windows.Forms.Form
$DropDownLabel = new-object System.Windows.Forms.Label
$DropDownLabel2 = new-object System.Windows.Forms.Label
$DropDown = new-object System.Windows.Forms.ComboBox
$DropDown2 = new-object System.Windows.Forms.ComboBox


$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState

$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
    $form1.WindowState = $InitialFormWindowState
}

#----------------------------------------------
#region Generated Form Code
$form1.Text = "User Creation software"
$form1.Name = "form1"
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 400
$System_Drawing_Size.Height = 200
$form1.ClientSize = $System_Drawing_Size

$DropDownArray = "Site1" , "Site2" , "Site3"

$DropDown2.Location = new-object System.Drawing.Size(125,80)
$DropDown2.Size = new-object System.Drawing.Size(150,27)
$dropdown2.DataBindings.DefaultDataSourceUpdateMode = 0
$dropdown2.TabIndex = 5
$dropdown2.Name = "dropdown2"
$Form1.Controls.Add($DropDown2)

$DropDownLabel2 = new-object System.Windows.Forms.Label
$DropDownLabel2.Location = new-object System.Drawing.Size(50,80)
$DropDownLabel2.size = new-object System.Drawing.Size(50,27)
$DropDownLabel2.Text = "Manager:"
$Form1.Controls.Add($DropDownLabel2)

$DropDown.Location = new-object System.Drawing.Size(125,55)
$DropDown.Size = new-object System.Drawing.Size(150,27)
$dropdown.DataBindings.DefaultDataSourceUpdateMode = 0
$dropdown.TabIndex = 4
$dropdown.Name = "dropdown1"

$DropDownLabel = new-object System.Windows.Forms.Label
$DropDownLabel.Location = new-object System.Drawing.Size(50,58)
$DropDownLabel.size = new-object System.Drawing.Size(50,27)
$DropDownLabel.Text = "Location:"

$Form1.Controls.Add($DropDown)
$Form1.Controls.Add($DropDownLabel)

ForEach ($Item in $DropDownArray) {
$DropDown.Items.Add($Item) | Out-Null
}

#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
} #end of function
GenerateForm
4

1 に答える 1

2

ライブ更新を行うには、ドロップボックス内のテキストが変更されたときにリストを更新する必要があります。あなたがそれに書き込むときにトリガーされる少なくとも2つのイベントがあります:TextUpdateKeyPress。ONEを選択してください。TextUpdateテキストが変更された後に反応しますが、前に反応するので、私は提案しますKeyPress。たとえば、次を使用してイベントリスナーを追加できます。

$DropDown2.add_TextUpdate({ Write-Host "TextUpdate. Updated text is: $($Dropdown2.Text)" })

スクリプトブロックでは、DCを照会する関数を実行する必要がありますが、この質問はADSI、AD、LDAPなどでタグ付けされていないため、別の質問です。

これにより、文字を変更するたびにクエリが実行され、DCに余分な負荷がかかることに注意してください。たとえば、「マーク」を書きたい場合は、書き終える前に最低4回検索されます。

不必要なトラフィックを最小限に抑えるために、代わりに検索ボタン付きのテキストボックスを使用することをお勧めします。

于 2013-02-06T22:55:04.477 に答える