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?

Frage Entwicklung

Mitglied: Vargsvart

Vargsvart (Level 1) - Jetzt verbinden

07.06.2010 um 10:49 Uhr, 26142 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: ...

Entwicklung
Powershell Arrayvariable in Schleife füllen
Frage von fisicgnEntwicklung5 Kommentare

Hallo zusammen, ich möchte folgendes bewerkstelligen: Ich habe eine Arrayvariable: Nun durchlaufe ich bspw. dreimal eine Schleife: Diese Schleife ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 6 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 10 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware8 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...