Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PowerShell Variablenname in einer Schleife hochzählen - geht das?

Frage Entwicklung

Mitglied: Vargsvart

Vargsvart (Level 1) - Jetzt verbinden

07.06.2010 um 10:49 Uhr, 23330 Aufrufe, 8 Kommentare

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:


01.
$j = 1 
02.
	 #Solange $j !=5 ist, soll die Schleife durchlaufen werden 
03.
	while($j -ne 5) 
04.
05.
		#$G soll aus $Gruppe + Wert von $j zusammengesetzt werden und dadurch  
06.
		#dann die Variablen $Gruppe1 - 5 bilden, welche die Gruppennnamen enthalten 
07.
		$G = $Gruppe+$j[$i] 
08.
		#$error auf null setzen 
09.
		$error[0] = $null 
10.
		#Überprüfen ob Gruppe bereits existiert 
11.
		$nul = [ADSI] "LDAP://testsrvas1/CN=$G,CN=Users,DC=testad,DC=int" 
12.
		#Wenn nicht, Gruppe anlegen 
13.
		if($error[0]) 
14.
15.
			$NewGroup = $AD.Create("group", "CN=$G") 
16.
			$NewGroup.psbase.InvokeSet("groupType", -2147483648 + 2) 
17.
			$NewGroup.SetInfo() 
18.
			#$j um 1 erhöhen 
19.
			$j++ 
20.
21.
		#Existiert Gruppe bereits, $j um 1 erhöhen 
22.
		else{$j++} 
23.
24.
	#$i ist der Wert, der den aktuell zu erstellenden User bestimmt und wird  
25.
	#innerhalb einer übergeordneten Schleife erhöht 
26.
	$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
Mitglied: LotPings
07.06.2010 um 12:41 Uhr
Hallo Varg,

dein Vorhaben erinnert aber mehr an c als an powershell.

01.
$varname = '_test' 
02.
for ($cnt=1; $cnt -le 5; $cnt++) 
03.
  {$cnt | select -outvariable $varname$cnt >$Null} 
04.
 
05.
ls variable:$varname* | sort name 
06.
 
Ausgabe
Name                           Value 
----                           ----- 
_test1                         {1} 
_test2                         {2} 
_test3                         {3} 
_test4                         {4} 
_test5                         {5}
Die Idee stammt aus diesem Blog

Gruß
LotPings
Bitte warten ..
Mitglied: Vargsvart
07.06.2010 um 13:03 Uhr
Das klingt schon mal ganz gut, aber wie könnte ich damit dann realisieren, dass der Inhalt der "hochgezählten" Variable verwendet wird?

Also im Ansatz so:

01.
$G = 'Gruppe' 
02.
 
03.
$Gruppe1 = "Oh" 
04.
$Gruppe2 = "du" 
05.
$Gruppe3 = "schöne" 
06.
$Gruppe4 = "neue" 
07.
$Gruppe5 = "Welt" 
08.
 
09.
for($i = 1; $i -le 5; $i++) 
10.
11.
	$i | select -outvariable $G$i >$Null 
12.
	 
13.
	#Hier soll eine Ausgabe der Variablen 
14.
	#$Gruppe1 bis $Gruppe5 stehen 
15.
	 
16.
}
Bitte warten ..
Mitglied: LotPings
07.06.2010 um 13:20 Uhr
Äh,
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}
Oder, wenn es in einer Zeile stehen soll.
01.
$Ausgabe = "" 
02.
ls variable:$G* |sort name| foreach {$Ausgabe = $Ausgabe+$_.value+" "} 
03.
$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)
01.
$G = 'Gruppe' 
02.
 
03.
$Gruppe1 = "Oh" 
04.
$Gruppe2 = "du" 
05.
$Gruppe3 = "schöne" 
06.
$Gruppe4 = "neue" 
07.
$Gruppe5 = "Welt" 
08.
 
09.
$Ausgabe = "" 
10.
for ($i=1; $i -le 5; $i++){get-item variable:$G$i | foreach{ $Ausgabe+=$_.value+" "}} 
11.
$Ausgabe
Gruß
LotPings
Bitte warten ..
Mitglied: Vargsvart
07.06.2010 um 13:56 Uhr
Auch hierfür bedanke ich mich schon einmal.

Leider bringt dies immer noch nicht das gewünschte Ergebnis, bzw. komme ich nicht dazu es richtig anzupassen.

In der Realität handelt es sich bei Gruppe1 bis 5 ja um Arrays (Es tut mir leid, falls dies vorher nicht offensichtlich war). Also sollte die Schleife in etwa so aussehen:

01.
$Gruppe1 = "Oh","Dies" 
02.
$Gruppe2 = "du","ist" 
03.
$Gruppe3 = "schöne","ein" 
04.
$Gruppe4 = "neue","kleiner" 
05.
$Gruppe5 = "Welt","Test" 
06.
 
07.
for($i = 0; $i -le 1; $i++) 
08.
09.
ls variable:$G* | foreach {echo $_.value[$i]} 
10.
}
Dies bringt mir zwar das Gewünschte Ergebnis, allerdings umrandet von einer Menge, für mich nicht nachvollziehbaren, Fehlermeldungen und wirren Ausgaben.
Bitte warten ..
Mitglied: LotPings
07.06.2010 um 14:11 Uhr
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)
Oh 
du 
schöne 
neue 
Welt 
Dies 
ist 
ein 
kleiner 
Test
Gruß
LotPings
Bitte warten ..
Mitglied: Vargsvart
07.06.2010 um 14:16 Uhr
Ja, du hast Recht! So funktioniert es (auch ohne "sort name").

Ich frage mich grad nur noch warum das $G = "Gruppe" den gewünschten Effekt bringt?
Wir verwenden es doch garnicht, oder?

Vielen, vielen Dank!
Bitte warten ..
Mitglied: LotPings
07.06.2010 um 14:40 Uhr
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 .

Um das Thema abzuschliessen, hier mal ein Vergleich (bei mir ist der sort nötig, aber Variante 3 mit get-item ist sowieso vorzuziehen).

01.
# C:\Test\2010-06\07\Test.ps1 
02.
$G = "Gruppe" 
03.
$Gruppe1 = "Oh","Dies" 
04.
$Gruppe2 = "du","ist" 
05.
$Gruppe3 = "schöne","ein" 
06.
$Gruppe4 = "neue","kleiner" 
07.
$Gruppe5 = "Welt","Test" 
08.
write-host -foregroundcolor yellow "---------- ohne Sort" 
09.
for($i = 0; $i -le 1; $i++){ 
10.
  $Ausgabe="" 
11.
  ls variable:$G* | foreach {$Ausgabe+=$_.value[$i]+" "} 
12.
  $Ausgabe 
13.
14.
write-host -foregroundcolor yellow "---------- mit  Sort" 
15.
 
16.
for($i = 0; $i -le 1; $i++){ 
17.
  $Ausgabe="" 
18.
  ls variable:$G* | sort name | foreach {$Ausgabe+=$_.value[$i]+" "} 
19.
  $Ausgabe 
20.
21.
write-host -foregroundcolor yellow "---------- mit Get-Item statt ls variable:" 
22.
for($i = 0; $i -le 1; $i++){ 
23.
  $Ausgabe="" 
24.
  for($j = 1; $j -le 5; $j++){ 
25.
    Get-Item variable:$G$j | foreach {$Ausgabe+=$_.value[$i]+" "} 
26.
27.
  $Ausgabe 
28.
}
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
Bitte warten ..
Mitglied: Vargsvart
07.06.2010 um 15:01 Uhr
Alle Fragen sind geklärt und damit ist das Thema gelöst.

So siehts nun übrigens aus:

01.
	#Gruppen anlegen 
02.
	Get-Item variable:$G* | foreach ` 
03.
04.
		$Grp = $_.value[$i] 
05.
		$error[0] = $null 
06.
		$nul = [ADSI] "LDAP://testsrvas1/CN=$Grp,CN=Users,DC=testad,DC=int" 
07.
		if(!($error[0])) 
08.
09.
			$NewGroup = $AD.Create("group", "CN=$Grp") 
10.
			$NewGroup.psbase.InvokeSet("groupType", -2147483648 + 2) 
11.
			$NewGroup.SetInfo() 
12.
13.
	}
Ich bedanke mich für deine Hilfe.

Gruß

Varg
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell CSV Auswertung in einer Schleife (3)

Frage von Johnny-CGN zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell Hashtable to Übersichtliche Darstellung (2)

Frage von Marabunta zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell Mauszeiger ausblenden (11)

Frage von Marabunta zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...