2017-06-09 5 views
1

Ich arbeite an einem PS-Skript, um einige unserer Prozesse einfacher und automatisierter zu machen, und ich war schnell außerhalb meines (begrenzten) PowerShell-Wissens.Powershell: Filtern von flachen Arrays

Kontext: Ich baue eine Benutzeroberfläche, die zwei ComboBox-Steuerelemente und eine Handvoll Textfelder für die Erstellung von Ressourcenkalender hat. Die erste ComboBox hat eine statische Liste von 3 Unterbereichen in meiner Organisation. Die zweite ComboBox hat eine Liste der Büros in dieser Abteilung, die automatisch aktualisiert werden sollte, wenn eine Auswahl in der ersten Box getroffen wird.

Das Endziel ist es, den Exchange-Verwaltungsshell-Code erforderlich erstellen Postfächer mit der notwendigen einheitlicher Namenskonvention zu erzeugen:

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

Im Moment denke ich, dass ich diese von einem einzelnen Array bauen würde aus der hat drei Felder, die Division, Unterteilung und Büro entsprechen:

Hinweis: Abteilung 1 hat keine Unterteilungen, während Abteilung 2 zwei Unterteilungen hat. Combobox 1 sollte Division Liste 1, Unterteilung 1, Unterteilung 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' 
) 

Spezifische Frage: Wie kehre ich nur die passenden Bürostandort Werte in $ gegeben arr_Offices jede spezifische cbo1.SelectedItem?

Antwort

2

Was Sie in Ihrem Beispiel zeigen, ist kein mehrdimensionales Array, es ist nur ein normales flaches Array.

Um ein mehrdimensionales (oder besser gesagt, eine gezackte) Array zu erhalten, tun:

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

Jetzt können Sie Index in den Wert auf zwei Dimensionen:

$arr_AgencyOffices[4][2] # New York 

That gesagt, würde ich wahrscheinlich die Büros in eine Reihe von verschachtelten Hashtables, wie folgt ordnen:

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

Jetzt können Sie Index in die Unterteilung Arrays ihre tatsächlichen Namen mit:

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

Dies macht es trivial die richtigen Listen für die Comboboxen gegeben abrufen, dass Sie nur den ausgewählten Text der vorangegangenen Wahl nehmen zu finden die nächste Liste:

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

und so weiter

+0

TIL. Lassen Sie mich dies verdauen und sehen, wie es hineinpasst. – music2myear

+0

Ok, das sieht so aus als würde es funktionieren. Ich spielte ein bisschen herum und stellte fest, dass ich $ AgencyOffices ['Division 1', 'Division 2'] verwenden kann, um alle drei Unterteilungen aufzulisten, die ich dann als cbo1-Quelle verwenden werde. Es scheint, dass meine kurze Lektüre vor dieser Frage zu Arrays und Hashtables zu kurz war und ich wirklich die Unterschiede und Feinheiten davon nicht verstand. Zurück zum Lesepult für ein bisschen dann. – music2myear

+1

@ music2myear schön zu hören. Lesen ist wichtig, aber anwenden ist alles :-) –