timo0o
Goto Top

Powershell Variablenname mit Variable

Moin,

ich habe eine Frage zu Powershell-Variablen.

Ich möchte mehrere Arrays in einem Skript bearbeiten, Quasi Server-Gruppen.

Als Beispiel:
$Group_1 =  @(
    "SRVRDP",   
    "SRVMAIL"  
)

$Group_2 = @(
    "SRVDC"  
)
$Group_3 = @(
    "SRVDC2"  
)

Nun habe ich in einer for-Schleife stehen, dass die Server in einer Gruppe neugestartet werden sollen:

for($y=0; $y -le $Group_1; $y++){
    
       
    Restart-Computer $Group_1[$y]
  }

Ich möchte aber, dass ich nun nicht 3 einzelne For-Schleifen habe, sondern alles mit so wenig Code wie möglich verarbeiten kann.
Ich hätte jetzt gedacht, dass ich das einfach so lösen könnte:

$Groups = "3"  

$Group_1 =  @(
    "SRVRDP",   
    "SRVMAIL"  
)

$Group_2 = @(
    "SRVDC"  
)
$Group_3 = @(
    "SRVDC2"  
)

for ($i=0; $i -le $Groups; $i++){
     for($y=0; $y -le $Group_$i; $y++){
           Restart-Computer $Group_$i[$y]
     }
}

... aber das klappt so natürlich nicht.

Hat jemand einen Tipp wie ich das Lösen kann?
Bin leider ein Powershell-Anfänger, daher bitte etwas Nachsicht mit meiner Lösung face-smile

Danke!

Timo

Content-ID: 1384745463

Url: https://administrator.de/contentid/1384745463

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

erikro
Lösung erikro 13.10.2021 um 14:46:48 Uhr
Goto Top
Moin,

dafür hat man das mehrdimensionale Array und die foreach-Schleife erfunden:

$group_1 = @(

    "Server1",  
    "Server2"  

)

$group_2 = @(

    "Server3",  
    "Server4"  


)

$groups = @(
    
    $group_1,
    $group_2


)

foreach($group in $groups) {

    foreach($server in $group) {
 
        write-host "$server wird gestartet"  
 
    }   

}

hth

Erik
Timo0o
Timo0o 13.10.2021 um 14:51:19 Uhr
Goto Top
Ja mega, doch so einfach.
DANKE!
floppy007
floppy007 13.10.2021 um 14:57:58 Uhr
Goto Top
du brauchst das mehrdimensionale Array :

$computers = @(@('PC11','PC12'),@('PC21','PC22','PC23'),@('PC31','PC32'))

foreach($group in $computers) {

foreach($pc in $group) {

write-host "$pc wird gestartet"

}

}
erikro
erikro 13.10.2021 um 15:02:00 Uhr
Goto Top
Zitat von @floppy007:

du brauchst das mehrdimensionale Array :

$computers = @(@('PC11','PC12'),@('PC21','PC22','PC23'),@('PC31','PC32'))

foreach($group in $computers) {

foreach($pc in $group) {

write-host "$pc wird gestartet"

}

}

Für den TO: Das ist identisch mit meiner Lösung. Nur ein wenig unübersichtlicher. face-wink
floppy007
floppy007 13.10.2021 um 19:49:15 Uhr
Goto Top
Zitat von @erikro:

Zitat von @floppy007:

du brauchst das mehrdimensionale Array :

$computers = @(@('PC11','PC12'),@('PC21','PC22','PC23'),@('PC31','PC32'))

foreach($group in $computers) {

foreach($pc in $group) {

write-host "$pc wird gestartet"

}

}

Für den TO: Das ist identisch mit meiner Lösung. Nur ein wenig unübersichtlicher. face-wink

Nein. Deine Lösung ist kein Multidimensionales Array Du hast ein einfaches Array . Schau mal genauer an vor allem die Anzahl der Klammern.
erikro
erikro 13.10.2021 um 20:50:32 Uhr
Goto Top
Zitat von @floppy007:

Zitat von @erikro:
Für den TO: Das ist identisch mit meiner Lösung. Nur ein wenig unübersichtlicher. face-wink

Nein. Deine Lösung ist kein Multidimensionales Array Du hast ein einfaches Array . Schau mal genauer an vor allem die Anzahl der Klammern.

Doch schon. Ich habe es nur anders aufgebaut. Ein zweidimensionales Array ist ein Array, das andere Arrays enthält. Ich habe zwei Arrays erstellt ($group_1 und $group_2). Diese habe ich in das Array $groups eingefügt. Damit ist $groups ein zweidimensionales Array. Und die Anzahl der Klammern ist bei beiden Lösungen auch die gleiche. Zwei für das äußere und jeweils zwei für die inneren. Du hast nur zwei mehr, weil Du drei innere Arrays hast und ich nur zwei.

Aber es gibt einen wesentlichen Unterschied zwischen meiner und Deiner Methode. Bei Dir sind die inneren Arrays anonym. Meine kann ich auch mit ihrem Namen ansprechen. Aber das ist hier eigentlich egal bzw. Deine Lösung ist sogar ein klein wenig besser, weil sie weniger Speicher verbraucht. Aber zum Verstehen, was man da macht, nämlich Arrays in einem Array speichern, ist meine besser. face-wink