Powershell:过滤平面阵列

时间:2017-06-09 00:36:45

标签: arrays powershell multidimensional-array combobox

我正在开发一个PS脚本,使我们的一些流程更容易,更自动化,并且我很快就发现自己超出了我(有限的)PowerShell知识。

上下文:我正在构建一个UI,它有两个ComboBox控件和一些用于创建资源日历的文本框。第一个ComboBox在我的组织中有一个包含3个子部门的静态列表。第二个ComboBox有一个该部门的办公室列表,在第一个框中进行选择时应自动更新。

最终目标是生成使用必要的统一命名约定创建邮箱所必需的Exchange命令行管理程序代码:

New-Mailbox -Name 'Acme Inc $division $office $subdivision Resource Name' -Alias 'resourcename'-OrganizationalUnit '<path/to/OU>' -UserPrincipalName 'resourcename@acmeinc.lcl' -SamAccountName 'resourcename' 

现在我想我会用一个阵列来构建这些阵列,这个阵列有三个对应于分区,分区和办公室的区域:

注意:第1部分没有细分,而第2部分有两个细分。组合框1应列出分区1,细分1,细分2。

$arr_AgencyOffices = @(
     'division 1','division 1','Aberdeen'
     'division 1','division 1','Perth'
     'division 1','division 1','Sacramento'
     'division 1','division 1','Long Beach'
     'division 1','division 1','New York'
     'division 1','division 1','Dallas'
     'division 1','division 1','Miami'
     'division 1','division 1','Vancouver'
     'division 2','subdivision 1','Sacramento'
     'division 2','subdivision 1','Tumwater'
     'division 2','subdivision 1','Vancouver'
     'division 2','subdivision 2','Aberdeen'
     'division 2','subdivision 2','Centralia'
     'division 2','subdivision 2','Sacramento'
     'division 2','subdivision 2','Long Beach'
     'division 2','subdivision 2','Shelton'
     'division 2','subdivision 2','Dallas'
     'division 2','subdivision 2','Stevenson'
     'division 2','subdivision 2','Miami'
     'division 2','subdivision 2','Vancouver'
)

具体问题:如果给定任何特定的cbo1.SelectedItem,我如何仅将匹配的办公地点值返回到$ arr_Offices?

1 个答案:

答案 0 :(得分:2)

您在示例中显示的不是多维数组,它只是一个常规的平面数组。

要获得多维(或更确切地说是锯齿状)数组,请执行以下操作:

$arr_AgencyOffices = @(
    @('division 1','division 1','Aberdeen'),
    @('division 1','division 1','Perth'),
    @('division 1','division 1','Sacramento'),
    @('division 1','division 1','Long Beach'),
    @('division 1','division 1','New York'),
    @('division 1','division 1','Dallas'),
    @('division 1','division 1','Miami'),
    @('division 1','division 1','Vancouver'),
    @('division 2','subdivision 1','Sacramento'),
    @('division 2','subdivision 1','Tumwater'),
    @('division 2','subdivision 1','Vancouver'),
    @('division 2','subdivision 2','Aberdeen'),
    @('division 2','subdivision 2','Centralia'),
    @('division 2','subdivision 2','Sacramento'),
    @('division 2','subdivision 2','Long Beach'),
    @('division 2','subdivision 2','Shelton'),
    @('division 2','subdivision 2','Dallas'),
    @('division 2','subdivision 2','Stevenson'),
    @('division 2','subdivision 2','Miami'),
    @('division 2','subdivision 2','Vancouver')
)

现在您可以在两个维度上索引值:

$arr_AgencyOffices[4][2] # New York

话虽这么说,我可能会将办公室安排成一组嵌套的哈希表,如下所示:

$AgencyOffices = @{
    'division 1' = @{
        'division 1' = @(
            'Aberdeen'
            'Perth'
            'Sacramento'
            'Long Beach'
            'New York'
            'Dallas'
            'Miami'
            'Vancouver'
        )
    }
    'division 2' = @{
        'subdivision 1' = @(
            'Sacramento'
            'Tumwater'
            'Vancouver'
        )
        'subdivision 2' = @(
            'Aberdeen'
            'Centralia'
            'Sacramento'
            'Long Beach'
            'Shelton'
            'Dallas'
            'Stevenson'
            'Miami'
            'Vancouver'
        )
    }
}

现在,您可以使用实际名称索引细分数组:

PS C:\> $AgencyOffices['division 2']['subdivision 1']
Sacramento
Tumwater
Vancouver

这使得检索组合框的正确列表变得微不足道,因为您可以使用前面选择的选定文本来查找下一个列表:

$combobox2List = $AgencyOffices[$combobox1.SelectedText].Keys

等等