bugger
Goto Top

Powershell ForEach in ForEach

Hallo,

ich habe folgenden Code:

$user = Get-ADGroupMember TestGruppe | Select-Object -ExpandProperty SamAccountName
$Path = "Pfad\zum\Ziel"  
$Files = @(
"datei 1.txt"  
"datei 2.txt"  
"datei 3.txt"  
)

foreach ($user in $user) {
    echo $user
	foreach ($file in $Files) {
	if ((Test-Path -Path $Path\$file))
			{
			(Get-Content $Path\$file) -replace '8000', '9000' | Set-Content $Path\$file  
			}
		}
}

Leider funktioniert das Script nur, wenn nur ein User in TestGruppe ist. Sobald mehrere enthalten sind, passiert nichts. Gibt auch keine Fehlermeldung.
Wenn ich ein echo in die zweite Schleife baue, sehe ich das er die Einträge verdoppelt. Hängt wahrscheinlich damit zusammen aber sogut kenne ich mich da nicht aus face-smile

Wie müsste das denn aussehen, damit es funktioniert?

Danke und Gruß
Bugger

Content-ID: 377135

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

Ausgedruckt am: 04.12.2024 um 08:12 Uhr

colinardo
colinardo 15.06.2018 aktualisiert um 11:11:38 Uhr
Goto Top
Servus.
Da braucht jemand einen Kaffee oder eine Brille face-smile.
foreach ($user in $user)
Das kann nicht funktionieren, du überschreibst deine Variable mit allen SamAccountNames selbst mit der Schleifenvariable. Also nutze einen anderen Namen für die Schleifenvariable oder für die Collection der $users.

Grüße Uwe
Bugger
Bugger 15.06.2018 um 11:12:53 Uhr
Goto Top
Ja, das war blöd face-smile
Aber die Lösung war es leider nicht:
Habe leider die $user Variable in $Path vergessen, eventuell relevant.
Beim echo werden mir 12 Einträge angezeigt anstatt nur 2.

$user = Get-ADGroupMember TestGruppe | Select-Object -ExpandProperty SamAccountName
$Path = "Pfad\zum\$user\Ziel"  
$Files = @(
"datei 1.txt"  
"datei 2.txt"  
"datei 3.txt"  
)

foreach ($entry in $user) {
   	foreach ($file in $Files) {
 echo $user
	if ((Test-Path -Path $Path\$file))
			{
			(Get-Content $Path\$file) -replace '8000', '9000' | Set-Content $Path\$file  
			}
		}
}
colinardo
Lösung colinardo 15.06.2018 aktualisiert um 11:23:38 Uhr
Goto Top
Beim echo werden mir 12 Einträge angezeigt anstatt nur 2.
Kein Wunder bei dir ist so ziemlich alles durcheinander und die Variablen an den falschen stellen und wenn du die Schleifenvariable im Körper der Schleife nicht mit änderst ... wunder mich das alles gar nicht.
$users = Get-ADGroupMember TestGruppe | Select -Expand SamAccountName
$files = "datei 1.txt","datei 2.txt","datei 3.txt"  
foreach ($entry in $users) {
        write-host $entry
   	foreach ($file in $Files) {
                $path = "Pfad\zum\$entry\Ziel\$file"  
        	if ((Test-Path $path)){
                   (Get-Content $path) -replace '8000', '9000' | Set-Content $path -Force  
	       }
       }
}
Also: Augen auf beim Buchstabenkauf face-smile.
Bugger
Bugger 15.06.2018 um 11:25:31 Uhr
Goto Top
Das wars. Manchmal sieht man den Wald vor lauter Bäumen nicht face-smile

Vielen vielen Dank, jetzt funktioniert alles so wie es soll face-smile