2017-06-09 4 views
1

私はいくつかのプロセスをより簡単に自動化するためにPSスクリプトを作成しています。Powershell:フラットアレイのフィルタリング

コンテキスト:私は、2つのComboBoxコントロールと、リソースカレンダーを作成するための少数のテキストボックスを持つUIを構築しています。最初のComboBoxには、組織内の3つのサブディビジョンの静的リストがあります。 2番目のComboBoxには、その部門のオフィスのリストがあり、最初のボックスで選択が行われると自動的に更新されます。

最終目標は、必要な均一の命名規則でメールボックスを作成するために必要なExchange管理シェルコードを生成することです:

New-Mailbox -Name 'Acme Inc $division $office $subdivision Resource Name' -Alias 'resourcename'-OrganizationalUnit '<path/to/OU>' -UserPrincipalName '[email protected]' -SamAccountName 'resourcename' 

は、今私は、私はこれは単一のアレイのオフこれらを構築しますと思っています

注:除算2には2つの細分がありますが、除算、小分け、およびオフィスに対応する3つのフィールドがあります。私は、任意の特定のcbo1.SelectedItem与え$ arr_Officesにのみマッチするオフィスの場所の値を返すにはどうすればよい:コンボボックス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' 
) 

に具体的な質問をリストアップする必要がありますか?

答えて

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') 
) 

今、あなたは2次元上の値へのインデックスすることができます:

$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 

ので、TIL

+0

に。私はこれを消化し、それがどのように収まるかを見てみましょう。 – music2myear

+0

これはうまくいくようです。私はちょっと試してみて、$ AgencyOffices ['division 1'、 'division 2']を使用して、cbo1ソースとして使用する3つの細分をすべて列挙できると判断しました。配列やハッシュテーブルに関するこの質問より前の私の短い読書は短すぎるようで、私はこれらの違いと微妙さを本当に把握していませんでした。読書机にちょっと戻ってください。 – music2myear

+1

@ music2myear聞いてよかったです。読むことは重要ですが、適用はすべてです:-) –

関連する問題