这次我遇到了另一个PowerShell GUI挑战。 我的表格包含两个不同的组合框(combobox1和combobox2)
我想做的是: 第一个组合框显示我拥有的所有客户端列表,第二个组合框显示在第一个组合框中选择的客户端可用的所有不同邮箱。
我再一次不知道怎么做,所以我要求你们提供建议。
我设法在第一个组合框上显示所有客户的列表。但我从未设法填充第二个组合框,显示该特定客户端可用的不同邮箱。
这是我到目前为止的代码,问题是我不知道如何“触发第二个组合框的人口”
$MainForm_Load={
#TODO: Initialize Form Controls here
add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010 -ea silentlycontinue
import-module activedirectory
$Clients = Get-ADOrganizationalUnit -SearchBase 'OU=Clients,DC=asp,DC=xaracloud,DC=net' -SearchScope Onelevel -Filter * -Properties Description
foreach ($client in $Clients)
{
$CurrentClient = "{0} ({1})" -f $client.Name, $client.Description
Load-ComboBox $combobox1 $CurrentClient -Append
}
if ($combobox1.SelectedIndex -gt -1)
{
$ClientSelected = ($combobox1.SelectedItem) -replace " \(.*\)"
$Mailboxes = Get-Mailbox -OrganizationalUnit $ClientSelected
foreach ($mailbox in $Mailboxes)
{
$CurrentMailbox = "{0} ({1})" -f $mailbox.Name, $mailbox.Alias
Load-ComboBox $combobox2 $CurrentMailbox -Append
}
}
}
请注意,为了根据第一个组合框的选择填充第二个组合框,我必须查询我的交换服务器,这需要几秒钟。有没有办法显示一个流程栏来说明正在处理请求?我不希望用户认为脚本什么都不做或者它不起作用。
答案 0 :(得分:1)
从Get-Mailbox行中删除| Out-String
并添加使用其中一个选项(当然还有更多):
使用ComboBox.SelectionChangeCommitted事件:
"当用户更改所选项目并且该更改显示在ComboBox中时发生"
$combobox2_SelectionChangeCommitted={
$Mailboxes = Get-Mailbox -OrganizationalUnit $ClientSelected
foreach ($mailbox in $Mailboxes)
{
$CurrentMailbox = "{0} ({1})" -f $mailbox.Name, $mailbox.Alias
Load-ComboBox $combobox2 $CurrentMailbox -Append
}
}
使用按钮
$button1_Click={
$Mailboxes = Get-Mailbox -OrganizationalUnit $ClientSelected
foreach ($mailbox in $Mailboxes)
{
$CurrentMailbox = "{0} ({1})" -f $mailbox.Name, $mailbox.Alias
Load-ComboBox $combobox2 $CurrentMailbox -Append
}
}
此外,还有更多选项,您可以从以上其中一个开始......