【问题标题】:Load ComboBox with AD group members only once仅将带有 AD 组成员的 ComboBox 加载一次
【发布时间】:2017-05-02 10:22:59
【问题描述】:

我正在 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每次?

非常感谢任何帮助。

【问题讨论】:

  • 我猜真正的问题在于组合框的点击事件。你怎么称呼function Load-ComboBox-Managers
  • 我正在使用 Add_Click 方法:$MgrComboBox.Add_Click({ Load-ComboBox-Managers })

标签: forms winforms powershell combobox active-directory


【解决方案1】:

问题似乎是您有一个不需要的点击事件。如果您只想在整个代码中调用此函数一次,则需要删除单击事件并设置 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 = @()

【讨论】:

  • 谢谢,我最终只在脚本末尾调用了一次函数,而不是使用 Add_Click 方法。所以现在组合框在打开表单时只填充一次,这很好而且干净。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多