schepper 1 Geschrieben 22. November 2021 Melden Teilen Geschrieben 22. November 2021 Hallo zusammen, ich habe Hilfe gesucht und dann bin auf diese Forum angestoßen. Ich bin nicht so gut in PowerShell und komme nicht mehr weiter, kann mir jemand bitte weiter helfen? Ich versuche Name und Erstellungsdatum auch vergleichen aber bekomme nicht hin und weiß es nicht mehr, wie ich weiter komme. $Folder1Path = 'C:\test1' $Folder2Path = 'C:\test2' $Folder1Files = Get-childitem -Path $Folder1Path $Folder2Files = Get-childitem -Path $Folder2Path $FileDiffs = Compare-Object -ReferenceObject $Folder1Files -DifferenceObject $Folder2Files $FileDiffs | foreach { $copyParams =@{ 'Path' = $_.InputObject.FullName } if ($_.SideIndicator -eq '<=') { $copyParams.Destination =$Folder2Path } Copy-Item @copyParams } Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 22. November 2021 Melden Teilen Geschrieben 22. November 2021 Hallo Schepper. Willkommen im MCSEBoard. Was willst Du denn eigentlich erreichen? Möchtest Du die beiden Verzeichnisse synchronisieren? Dafür kann man robocopy benutzen. Wenn Du mit Compare-Object den Namen und das Erstellungsdatum vergleichen möchtest, solltest Du im Parameter -Property die Attribute angeben die Du vergleichen möchtest - also Name und CreationTime Zitieren Link zu diesem Kommentar
schepper 1 Geschrieben 22. November 2021 Autor Melden Teilen Geschrieben 22. November 2021 Danke @BOfH_666 Ja, es geht um halt beiden Verzeichnisse synchronisieren. Test2 Verzeichnis ist ein Software Verzeichnis und Test1 ist neue Version. Es ist halt so, das in Test1 Ordner(Update) werden nicht alle Inhalt bearbeitet nur paar Sachen. Okay, ich probiere. Und weißt du warum, dass die Unterordner nicht verglichen werden? Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 22. November 2021 Melden Teilen Geschrieben 22. November 2021 vor 35 Minuten schrieb schepper: Ja, es geht um halt beiden Verzeichnisse synchronisieren. Dafür ist robocopy hervorragend geeignet. vor 36 Minuten schrieb schepper: Und weißt du warum, dass die Unterordner nicht verglichen werden? Ja. Get-ChildItem liefert standardmäßig nur die Dateien und Ordner im angegebenen Pfad. Wenn Du Unterordner einschließen möchtest, musst Du den Parameter -Recurse angeben. Zitieren Link zu diesem Kommentar
schepper 1 Geschrieben 22. November 2021 Autor Melden Teilen Geschrieben 22. November 2021 vor 7 Minuten schrieb BOfH_666: Ja. Get-ChildItem liefert standardmäßig nur die Dateien und Ordner im angegebenen Pfad. Wenn Du Unterordner einschließen möchtest, musst Du den Parameter -Recurse angeben. das habe ich schon mal getestet aber funktioniert nicht Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 22. November 2021 Melden Teilen Geschrieben 22. November 2021 vor 5 Minuten schrieb schepper: das habe ich schon mal getestet aber funktioniert nicht Bei mir schon, und jetzt? ;) Zeig doch den Code, der nicht funktioniert hat. Zitieren Link zu diesem Kommentar
schepper 1 Geschrieben 22. November 2021 Autor Melden Teilen Geschrieben 22. November 2021 $Folder1Path = 'C:\test1' $Folder2Path = 'C:\test2' $Folder1Files = Get-childitem -Path $Folder1Path $Folder2Files = Get-childitem -Path $Folder2Path $FileDiffs = Compare-Object -ReferenceObject $Folder1Files -DifferenceObject $Folder2Files $FileDiffs | foreach { $copyParams =@{ 'Path' = $_.InputObject.FullName } if ($_.SideIndicator -eq '<=') { $copyParams.Destination =$Folder2Path } Copy-Item @copyParams } oben neben "Get-childitem -Recurse" geschrieben. Sollte doch da oben kommen oder weiß ich das falsch? Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 22. November 2021 Melden Teilen Geschrieben 22. November 2021 Wie schon geschrieben - wenn es Dir um eine Synchronisation geht, solltest Du Dir robocopy anschauen. Das ist speziell für diesen Zweck entwickelt worden. Ein aufwändiges/potenziell fehleranfälliges Script ist dafür nicht nötig. Davon unabhängig - wenn Du die Ergebnis-Objekte filtern möchtest, kannst Du Where-Object verwenden: $Folder1Path = 'C:\test1' $Folder2Path = 'C:\test2' $Folder1Files = Get-childitem -Path $Folder1Path -Recurse $Folder2Files = Get-childitem -Path $Folder2Path -Recurse Compare-Object -ReferenceObject $Folder1Files -DifferenceObject $Folder2Files | Where-Object -Property SideIndicator -EQ -Value '<=' | ForEach-Object { Copy-Item -Path $_.InputObject.FullName -Destination $Folder2Path } Zitieren Link zu diesem Kommentar
schepper 1 Geschrieben 22. November 2021 Autor Melden Teilen Geschrieben 22. November 2021 Ich habe mir robocopy angeschaut. Davon habe ich erstmal von dir gehört. Sieht besser als PowerShell und einfacher. vor 47 Minuten schrieb BOfH_666: Davon unabhängig - wenn Du die Ergebnis-Objekte filtern möchtest, kannst Du Where-Object verwenden: $Folder1Path = 'C:\test1' $Folder2Path = 'C:\test2' $Folder1Files = Get-childitem -Path $Folder1Path -Recurse $Folder2Files = Get-childitem -Path $Folder2Path -Recurse Compare-Object -ReferenceObject $Folder1Files -DifferenceObject $Folder2Files | Where-Object -Property SideIndicator -EQ -Value '<=' | ForEach-Object { Copy-Item -Path $_.InputObject.FullName -Destination $Folder2Path } Das funktioniert aber da gibt ein kleines Problem. Z.B. 'C:\test1\ordner1\text.txt' diese Text Datei wird direkt 'C:\test2' kopiert nicht in 'C:\test1\ordner1'. PS: Ignoriert bitte mein Hochdeutsch! @BOfH_666 ich teste gerade mit robocopy. Es funktioniert perfekt und genau wie ich es möchte. Muss nur noch ein kleines Skript draus erstellen und nur mit ein klick im Hintergrund laufenlassen. Danke dir @BOfH_666 nochmal! ^^ 1 Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 23. November 2021 Melden Teilen Geschrieben 23. November 2021 Am 22.11.2021 um 13:24 schrieb schepper: Z.B. 'C:\test1\ordner1\text.txt' diese Text Datei wird direkt 'C:\test2' kopiert nicht in 'C:\test1\ordner1'. Muß ja auch so sein, wenn das Ziel immer $Folder2Path ist Da mußt Du dann schon etwas "Pfadmassage" betreiben. Aber über Robocopy wurde genug gesagt, es muß nicht immer ein Skript sein Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.