2017-06-09 133 views
1

我正在開發一個PS腳本,用於使我們的一些過程更輕鬆,更自動化,我很快發現自己遠遠超出了我的(有限)PowerShell知識。Powershell:過濾平面陣列

上下文:我正在構建一個UI,它有兩個ComboBox控件和一些用於創建資源日曆的文本框。第一個ComboBox在我的組織中有一個包含3個子部門的靜態列表。第二個組合框具有該部門中的辦公室列表,當在第一個框中進行選擇時應自動更新該列表。

的最終目標是產生必要的Exchange命令行管理代碼來創建必要的統一命名約定郵箱:

New-Mailbox -Name 'Acme Inc $division $office $subdivision Resource Name' -Alias 'resourcename'-OrganizationalUnit '<path/to/OU>' -UserPrincipalName '[email protected]' -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' 
) 

具體問題:我怎麼只返回匹配的辦公地點值到$ arr_Offices給出任何具體的cbo1.SelectedItem?

回答

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 

+0

TIL。讓我消化這個,看看它是如何適應的。 – music2myear

+0

好吧,這看起來像它會起作用。我玩了一下,並確定我可以使用$ AgencyOffices ['division 1','division 2']列出我將用作cbo1源的所有三個細分。在這個關於數組和哈希表的問題之前,我看了一下簡短的閱讀內容,但我確實沒有把握這些內容的差異和微妙之處。然後回到閱讀桌。 – music2myear

+1

@ music2myear很高興聽到。閱讀是重要的,但應用是一切:-) –