Top-Themen

Aktuelle Themen (A bis Z)

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?

Mitglied: Vargsvart

Vargsvart (Level 1) - Jetzt verbinden

07.06.2010 um 10:49 Uhr, 26865 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 ..
Ähnliche Inhalte
Batch & Shell

Powershell: Variabelnamen in einer Schleife hochzählen lassen

gelöst Frage von oegi99Batch & Shell3 Kommentare

Ich arbeite im Moment an einem Script um Active Directory Benutzer automatisch aus einem csv File auszulesen und zu ...

Entwicklung

PowerShell - Schleifen

gelöst Frage von 119785Entwicklung8 Kommentare

Hallo Leute, ich habe hier eine Aufgabe und brauche mal einen kleinen Tip. Entweder habe ich eine Denkbloacke oder ...

Batch & Shell

Powershell If-Schleife funktioniert nicht

gelöst Frage von windelterroristBatch & Shell5 Kommentare

Hallo Admins Arbeite gerade an einem kleinen Script funktioniert aber nicht so, wie ich mir das vorstelle Mein Code: ...

Batch & Shell

Powershell CSV Auswertung in einer Schleife

gelöst Frage von Johnny-CGNBatch & Shell3 Kommentare

Liebe Administratoren, mein Powershell-Erfahrungsschatz wächst stetig aber langsam. Ich stehe seit einigen Tagen auf dem Schlauch. Mir liegt eine ...

Neue Wissensbeiträge
Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 2 StundenMicrosoft2 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 20 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

iOS
IOS 11.2.6 verfügbar
Information von sabines vor 1 TagiOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 1 TagSicherheit8 Kommentare

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server30 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless25 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...

SAN, NAS, DAS
Qnap TS-453S Pro - Anbindung Active Directory
Frage von JuckieSAN, NAS, DAS13 Kommentare

Hallo zusammen, ich habe hier eine Qnap TS-453S Pro die sich mal so absolut gar nicht in das Active ...