PowerShell Variablenname in einer Schleife hochzählen - geht das?
Guten Tag,
um User aus einer .csv ins Active Directory einzufügen, soll ich ein PowerShell Skript erstellen. Dieses habe ich auch soweit erledigt, nur möchte ich es etwas "verschönern".
Ich habe fünf Variablen, welche $Gruppe1 - 5 heißen, in welchen die Gruppen der einzelnen User hinterlegt sind um diese anzulegen.
Sollte die Gruppe noch nicht existieren, wird sie angelegt, ansonsten wird mit der nächsten Gruppe weiter gemacht.
Nun möchte ich gerne, anstatt für jede Gruppe eine eigene Schleife zu erstellen, alles in einer erledigen.
Dies soll theoretisch so aussehen:
Bitte bedenkt, dass das so nicht funktioniert und ich gerne wissen würde ob (und wenn ja, dann wie) das funktionieren könnte.
Ich bedanke mich jetzt schon einmal bei jedem der versucht zu helfen.
Gruß
Varg
um User aus einer .csv ins Active Directory einzufügen, soll ich ein PowerShell Skript erstellen. Dieses habe ich auch soweit erledigt, nur möchte ich es etwas "verschönern".
Ich habe fünf Variablen, welche $Gruppe1 - 5 heißen, in welchen die Gruppen der einzelnen User hinterlegt sind um diese anzulegen.
Sollte die Gruppe noch nicht existieren, wird sie angelegt, ansonsten wird mit der nächsten Gruppe weiter gemacht.
Nun möchte ich gerne, anstatt für jede Gruppe eine eigene Schleife zu erstellen, alles in einer erledigen.
Dies soll theoretisch so aussehen:
$j = 1
#Solange $j !=5 ist, soll die Schleife durchlaufen werden
while($j -ne 5)
{
#$G soll aus $Gruppe + Wert von $j zusammengesetzt werden und dadurch
#dann die Variablen $Gruppe1 - 5 bilden, welche die Gruppennnamen enthalten
$G = $Gruppe+$j[$i]
#$error auf null setzen
$error = $null
#Überprüfen ob Gruppe bereits existiert
$nul = [ADSI] "LDAP://testsrvas1/CN=$G,CN=Users,DC=testad,DC=int"
#Wenn nicht, Gruppe anlegen
if($error)
{
$NewGroup = $AD.Create("group", "CN=$G")
$NewGroup.psbase.InvokeSet("groupType", -2147483648 + 2)
$NewGroup.SetInfo()
#$j um 1 erhöhen
$j++
}
#Existiert Gruppe bereits, $j um 1 erhöhen
else{$j++}
}
#$i ist der Wert, der den aktuell zu erstellenden User bestimmt und wird
#innerhalb einer übergeordneten Schleife erhöht
$i++
Bitte bedenkt, dass das so nicht funktioniert und ich gerne wissen würde ob (und wenn ja, dann wie) das funktionieren könnte.
Ich bedanke mich jetzt schon einmal bei jedem der versucht zu helfen.
Gruß
Varg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144278
Url: https://administrator.de/forum/powershell-variablenname-in-einer-schleife-hochzaehlen-geht-das-144278.html
Ausgedruckt am: 20.12.2024 um 18:12 Uhr
8 Kommentare
Neuester Kommentar
Hallo Varg,
dein Vorhaben erinnert aber mehr an c als an powershell.
Ausgabe
Die Idee stammt aus diesem Blog
Gruß
LotPings
dein Vorhaben erinnert aber mehr an c als an powershell.
$varname = '_test'
for ($cnt=1; $cnt -le 5; $cnt++)
{$cnt | select -outvariable $varname$cnt >$Null}
ls variable:$varname* | sort name
Name Value
---- -----
_test1 {1}
_test2 {2}
_test3 {3}
_test4 {4}
_test5 {5}
Die Idee stammt aus diesem Blog
Gruß
LotPings
Äh,
die Schleife in Z09-Z11 überschreibt doch die Variableninhalte mit dem Zähler.
Ersetze Zeile 9 einfach mit
Oder, wenn es in einer Zeile stehen soll.
Edit: gezielter wäre der Zugriff per Schleife auf den Variablen-Inhalt mit Get-Item (der sort ist bei mehr als 10 Werten nicht numerisch)
Gruß
LotPings
die Schleife in Z09-Z11 überschreibt doch die Variableninhalte mit dem Zähler.
Ersetze Zeile 9 einfach mit
ls variable:$G* |sort name| foreach {echo $_.value}
$Ausgabe = ""
ls variable:$G* |sort name| foreach {$Ausgabe = $Ausgabe+$_.value+" "}
$Ausgabe
Edit: gezielter wäre der Zugriff per Schleife auf den Variablen-Inhalt mit Get-Item (der sort ist bei mehr als 10 Werten nicht numerisch)
$G = 'Gruppe'
$Gruppe1 = "Oh"
$Gruppe2 = "du"
$Gruppe3 = "schöne"
$Gruppe4 = "neue"
$Gruppe5 = "Welt"
$Ausgabe = ""
for ($i=1; $i -le 5; $i++){get-item variable:$G$i | foreach{ $Ausgabe+=$_.value+" "}}
$Ausgabe
Gruß
LotPings
Wenn ich bei dieser Variante vorne noch $G = "Gruppe" einfüge und in Zeile 09 den sort name dazwischenschiebe bekomme ich hier diese Ausgabe:
(Ich fange immer mit einer neuen Shell an, um Seiteneffekte alter Variableninhalte auszuschließen)
Gruß
LotPings
(Ich fange immer mit einer neuen Shell an, um Seiteneffekte alter Variableninhalte auszuschließen)
Oh
du
schöne
neue
Welt
Dies
ist
ein
kleiner
Test
Gruß
LotPings
Zitat von @Vargsvart:
Ich frage mich grad nur noch warum das $G = "Gruppe" den gewünschten Effekt bringt?
Wir verwenden es doch garnicht, oder?
Doch im ls .Ich frage mich grad nur noch warum das $G = "Gruppe" den gewünschten Effekt bringt?
Wir verwenden es doch garnicht, oder?
Um das Thema abzuschliessen, hier mal ein Vergleich (bei mir ist der sort nötig, aber Variante 3 mit get-item ist sowieso vorzuziehen).
# C:\Test\2010-06\07\Test.ps1
$G = "Gruppe"
$Gruppe1 = "Oh","Dies"
$Gruppe2 = "du","ist"
$Gruppe3 = "schöne","ein"
$Gruppe4 = "neue","kleiner"
$Gruppe5 = "Welt","Test"
write-host -foregroundcolor yellow "---------- ohne Sort"
for($i = 0; $i -le 1; $i++){
$Ausgabe=""
ls variable:$G* | foreach {$Ausgabe+=$_.value[$i]+" "}
$Ausgabe
}
write-host -foregroundcolor yellow "---------- mit Sort"
for($i = 0; $i -le 1; $i++){
$Ausgabe=""
ls variable:$G* | sort name | foreach {$Ausgabe+=$_.value[$i]+" "}
$Ausgabe
}
write-host -foregroundcolor yellow "---------- mit Get-Item statt ls variable:"
for($i = 0; $i -le 1; $i++){
$Ausgabe=""
for($j = 1; $j -le 5; $j++){
Get-Item variable:$G$j | foreach {$Ausgabe+=$_.value[$i]+" "}
}
$Ausgabe
}
PS C:\Test\2010-06\07> C:\Test\2010-06\07\Test.ps1
---------- ohne Sort
du schöne Welt neue Oh
ist ein Test kleiner Dies
---------- mit Sort
Oh du schöne neue Welt
Dies ist ein kleiner Test
---------- mit Get-Item statt ls variable:
Oh du schöne neue Welt
Dies ist ein kleiner Test
PS C:\Test\2010-06\07>
Wenn alle Fragen geklärt sind, wäre es schön wenn du den Beitrag auf gelöst setzt.
Gruß
LotPings