2016-12-20 2 views
0

Das Skript, das ich unten einschließe, muss die folgenden Aufgaben ausführen. Es muss eine Liste der Server von AD erhalten, dann durchlaufen Sie jeden dieser Servernamen und greifen den zweiten zum neuesten Ordner in einem Verzeichnis, benennen ihn um und kopieren ihn auf einen anderen Server.Powershell: Kopieren-Element funktioniert nicht in ForEach-Schleife

Der Copy-Item-Befehl nicht funktioniert, wenn ich es in der foreach-Schleife habe, wie unten geschrieben:

#gathering server names 
$serverList = (Get-ADComputer -Filter "Name -like 'Q0*00*'" -SearchBase "OU=MPOS,OU=Prod,OU=POS,DC=N,DC=NET").name | Sort-Object | Out-File C:\Temp\MPOS\MPOSServers.txt 
$serverListPath = "C:\Temp\MPOS\MPOSServers.txt" 

#Retrieve a list of MPOS Print servers from text file and set to $serverNames 
$serverNames = Get-Content -Path $serverListPath 

#Iterate through each of the server names 
foreach ($serverName in $serverNames) { 

$reportServer = "a03" 

Get-ChildItem "\\$($serverName)\d$\MPosLogs\Device" | 
Where { $_.PSIsContainer } | 
Sort CreationTime -Descending | 
Select -Skip 1 | 
Select -First 1 | 
ForEach-Object { 

    Rename-Item -Path $_.FullName -NewName ("$serverName" + "_" + $_.Name) -PassThru | 
    Copy-Item -Destination "\\$($serverName)\c$\temp\MPOS\Logs" 

    } 

} 

aber es funktioniert gut, wenn ich es außerhalb der foreach-Schleife am Testen, geschrieben als unten:

Get-ChildItem "\\$($serverName)\d$\MPosLogs\Device" | 
Where { $_.PSIsContainer } | 
Sort CreationTime -Descending | 
Select -Skip 1 | 
Select -First 1 | 
ForEach-Object { 

    Rename-Item -Path $_.FullName -NewName ("$serverName" + "_" + $_.Name) -PassThru | 
    Copy-Item -Destination "\\$($serverName)\c$\temp\MPOS\Logs" 

} 

Irgendwelche Ideen, warum es nicht im vollen Skript zu arbeiten? Ich ändere nichts, wenn ich es teste, ich führe nur die obigen Befehle aus, ohne in der ForEach-Schleife zu sein. Es schließt die restlichen Aufgaben ab, mit Ausnahme der Ordnerkopien. Die Ordnerkopie funktioniert nur, wenn ich sie außerhalb der ForEach-Schleife auf einem einzelnen Server teste.

Wenn ich sage "es funktioniert nicht", gibt es keine Fehler oder ähnliches. Es kopiert einfach nicht die Ordner.

Vielen Dank! :) LG

+0

lol Ich erinnere mich an diesen Code :) '$ ServerListPath' zeigt auf eine gültige Datei richtig? Können Sie das Ergebnis von 'write-host $ servernames' anzeigen? Ich vermute, dass es ein Problem mit wie dieses Array erzeugt wird –

+0

@MikeGaruccio Hallo :) Ja Ich wollte einen neuen Thread für ein neues Problem zu starten. Write-Host $ serverNames listet alle Servernamen in folgendem Format auf: Q0001001 Q0002001 Q0003001 - usw. – LilithGoddess

+0

hmm alles in einer Zeile? Was zeigt '$ serverNames.Count'? –

Antwort

1

@MikeGaruccio gut, das ist extrem peinlich. Ich denke, ich habe gerade zu lange auf dieses Skript gestarrt und nicht bemerkt, dass ich die Ordner nicht tatsächlich nach $ reportServer kopiert habe - es ist eine gute Sache, die du gefragt hast !!! Es ist definitiv wichtig. Alles ist jetzt gut, nachdem der letzte $ serverName geändert wurde, um $ reportServer tatsächlich zu lesen. Danke und Entschuldigung für die Verschwendung Ihrer Zeit ... Ich schätze Ihre Hilfe sehr.

Verwandte Themen