我正在开发Powershell中的新用户创建表单。我正在使用ComboBox,以便表单的用户可以从列表中选择新用户的直线管理器。管理器列表是从Active Directory中的安全组中提取的。有很多成员因此加载需要几秒钟,每次打开ComboBox时都会发生此延迟。我的代码如下:
function Load-ComboBox-Managers
{
$MgrComboBox.Items.Clear()
$MgrArray = Get-ADGroupMember -Identity "All Managers" |
Select-Object Name
ForEach ($item in $MgrArray) {
$MgrComboBox.Items.Add($item.Name)}
}
我的问题是,是否可以在ComboBox第一次下拉时运行该函数,然后将该列表存储在某处并在每次打开ComboBox时引用该存储列表,而不是查询AD每一次?
非常感谢任何帮助。
答案 0 :(得分:0)
问题似乎是您有一个不需要的点击事件。如果您只想在整个代码中调用此函数一次,则需要删除click事件并将ComboBox的项设置一次。之后,它们将保持不变,直到实例结束或重置它们。
您的代码:
function Load-ComboBox-Managers{
$MgrComboBox.Items.Clear()
$MgrArray = Get-ADGroupMember -Identity "All Managers" |
Select-Object Name
ForEach ($item in $MgrArray) {
$MgrComboBox.Items.Add($item.Name)}
}
$MgrComboBox.Add_Click({ Load-ComboBox-Managers }) #This line causes reinitialization
更改了代码:
function Load-ComboBox-Managers{
$MgrComboBox.Items.Clear()
$MgrArray = Get-ADGroupMember -Identity "All Managers" |
Select-Object Name
ForEach ($item in $MgrArray) {
$MgrComboBox.Items.Add($item.Name)}
}
#Call the function to set the ComboBox items
Load-ComboBox-Managers
此外,如果您的代码需要,您可以设置一个变量来保存ComboBox将描述的项目列表,但我不认为这是您要使用的方法。
$var = @() #or
$Global:var = @()