none
Kopierabfrage mit Datumsabgleich und NUR die Dateien in verschiedenen Unterverzeichnissen RRS feed

  • Frage

  • Hallo Zusammen,

    ich habe schon Ewigkeiten probiert und glaube, dass die Lösung doch viel einfacher ist, als ich sie versuche zu machen. Vielleicht kann mir jemand einen Denkanstoß geben oder hat ein Beispielscript.

    Als Beispiel:
    Ich habe 60.000 Dateien in circa 10.000 verschiedenen Ordner (ORD12345) [Zahlenfolge immer anders]

    Die Dateien die in den verschiedenen Ordnern liegen (alles Bilddateien .JPG, .PNG. .BMP) sollen in ein neues Verzeichnis kopiert werden. Aber lediglich die Dateien und nicht der Ordner.

    Beispiel:

    C:\Temp\A\ORD123423

    [ORD123423-1.JPG, ORD123423-2.JPG]

    C:\Temp\A\ORD643643

    [ORD643643-1.JPG, ORD643643-2.JPG, ORD643643-3.JPG, ORD643643-4.JPG]

    Zielordner:

    C:\Temp\Neu\

    [ORD123423-1.JPG, ORD123423-2.JPG]

    [ORD643643-1.JPG, ORD643643-2.JPG, ORD643643-3.JPG, ORD643643-4.JPG]

    Das Script macht genau das, aber 1. ist es sehr langsam, weil die Pfade auf verschiedenen FTP Servern liegen.

    2. Gibt es doch sicherlich eine einfachere Möglichkeit und 3. dann noch die Abfrage ob die Quelldatei neuer als die Zieldatei ist?

    Habt ihr Ideen und oder Vorschläge?

    Hoffentlich habe ich mich verständlich ausgedrückt. 

    Code Beispiel:

    $quelle = "C:\Temp\"
    $ziel = "C:\Temp\Neu"
    
    $Dateien = Get-Childitem $quelle -recurse | where{-not $_.PSIsContainer}
    $Ordner = Get-ChildItem $quelle
    
    $j = 0
    $i = 0
    
    # Variablen deklarieren
    
    $logdatei = "C:\Temp\Log.log"
    
    # LOG Datei erstellen
    
      '1' | out-file $logdatei -Append
    
    do
    {
    
    $Pfad = $Ordner[$j].Fullname
    $pruefung = $Ordner[$j].Name
    
       if($pruefung -like "ORD*")
        {
    
        # echo $pruefung
        $kopieren = Get-ChildItem $Pfad -recurse | where{-not $_.PSIsContainer}
        $CopyNeu = $kopieren.Fullname
    
        # Kopiervorgang mit Ausgabe
        Copy-Item -Path $CopyNeu -Destination $ziel
        echo Copy-Item -Path $CopyNeu -Destination $ziel
        # Hochzählen des "Ordners"
        $j++
        }
        else 
        {
        $j++
        }    
    }until($j -eq 100000)

    Freitag, 28. Februar 2020 13:20

Antworten

  • Das Script macht genau das, aber 1. ist es sehr langsam, weil die Pfade auf verschiedenen FTP Servern liegen.

    1. ist die Powershell bei Dateisystemoperationen seeeeehr langsam ... und dann kommt auch noch die "FTP-Latenz" dazu.

    2. Gibt es doch sicherlich eine einfachere Möglichkeit und

    Definiere "einfacher"! ;-)

    3. dann noch die Abfrage ob die Quelldatei neuer als die Zieldatei ist?

    Habt ihr Ideen und oder Vorschläge?

    Je nach den konkreten Bedingungen, könntest Du probieren, für die eigentlichen Copy-Jobs robocopy einzusetzen.

    Hoffentlich habe ich mich verständlich ausgedrückt.

    Das merkst Du, wenn wir die richtigen Tipps geben. ;-)

    Nach Deiner Erklärung sollte folgender Code-Schnipsel eigentlich genügen ...

    $quelle = 'C:\Temp'
    $ziel = 'C:\Temp\Neu'
    
    Get-ChildItem -Path $quelle -Filter * -Recurse | 
        ForEach-Object {
            Copy-Item -Path $_.FullName -Destination $ziel
        }
    Es sei denn, Du hast uns essenzielle Informationen vorenthalten. ;-)

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''


    • Bearbeitet BOfH-666 Freitag, 28. Februar 2020 13:40
    • Als Antwort markiert JOOP156 Samstag, 29. Februar 2020 14:25
    Freitag, 28. Februar 2020 13:39
  • OK, dass das ein FTP-Server ist, ist hier also gar nicht relevant, weil Du ihn auch per SMB erreichst, richtig? Was ist es denn für ein Server? Ist das vielleicht auch ein Windows-Server, auf dem man vielleicht auch Powershell-Skripte ausführen könnte? Häufig ist eine zu überwindende Netzwerkstrecke der limitierende Flaschenhals. Wenn Skripte rein lokal laufen, sind die meistens deutlich schneller. Wenn das also auch ein Windows-Server ist, könnte man die nötigen Informationen auf dem Server dort "lokal" einsammeln und nur diese übertragen.

    Ja es ist ein Windows Server. Das Problem ist: Server 1 (entfernter Rechner im Rechenzentrum -> kopiert zu einem Server in unserem Serverschrank). Wo ich das Script laufen lasse ist dann glaube ich egal. Der Kopiervorgang geht sowieso über die Datenleitungen und nicht nur lokal. 

    Teilweise .... ? Wenn das ein unternehmenskritischer Prozess ist, sollte man vielleicht "größere Geschütze" auffahren, als nur ein paar selbst gebastelte Zeilen Code!?

    Also um das nochmal kurz zu erklären: Mein Script läuft ist hoffentlich schnell genug fertig und dann läuft das Tool, welches die Schnittstelle zur Onlineplattform stellt. Das Problem hierbei ist, wenn das Script nicht schnell genug fertig ist, fehlen Artikel, die dann erst 6 Stunden später auf der Homepage online sind.


    Na dafür hast Du ja jetzt uns ... ;-) Das macht den Code-Schnipsel vom Anfang aber gleich wieder deutlich komplexer und auch vermutlich wieder etwas langsamer:

    $quelle = 'C:\Temp'
    $ziel = 'C:\Temp\Neu'
    $Include = @(
        '*.JPG',
        '*.JPEG',
        '*.BMP',
        '*.PNG',
        '*.jpg',
        '*.jpeg',
        '*.bmp',
        '*.png', 
        '*.tif', 
        '*.TIF'
    )
    Get-ChildItem -Path $quelle -Include $Include -Recurse | 
    ForEach-Object {
        $zielDateiPfad = Join-Path -Path $ziel -ChildPath $_.Name
        if (Test-Path -Path $zielDateiPfad) {
            $zielDatei = Get-Item -Path $zielDateiPfad
            if ($zielDatei.LastWriteTime -lt $_.LastWriteTime) {
                Copy-Item -Path $_.FullName -Destination $ziel -Force
            }
        }
        else {
            Copy-Item -Path $_.FullName -Destination $ziel -Force
        }
    }

    Erstmal musst Du ja prüfen, ob die Zieldatei überhaupt schon vorhanden ist. Wenn sie das ist, musst Du die letzte Zugriffszeit/ÄnderungsZeit/Erstellungszeit ermitteln, bevor Du diese jetzt mit der Quelldatei vergleichen kannst. Je nach dem, welche Zeit Du benutzen willst, musst Du den Code natürlich anpassen. Sollte der remote Server kein Windows-Server sein, kann es auch nötig werden die jeweiligen UTC-Zeiten zu benutzen. 

    Wie üblich gibt es, abhängig von der vorhandenen Infrastruktur, zahlreiche denkbare Möglichkeiten, die ganze Prozedur zu beschleunigen.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Echt ganz großes Dankeschön, dass du dich für mich schon so lange mit dem Script beschäftigt hast. Ich schaue mir das ganze nochmal an und melde mich wahrscheinlich sowieso nochmal :)
    • Bearbeitet JOOP156 Donnerstag, 5. März 2020 10:21
    • Als Antwort markiert JOOP156 Freitag, 6. März 2020 13:06
    Donnerstag, 5. März 2020 06:31

Alle Antworten

  • Das Script macht genau das, aber 1. ist es sehr langsam, weil die Pfade auf verschiedenen FTP Servern liegen.

    1. ist die Powershell bei Dateisystemoperationen seeeeehr langsam ... und dann kommt auch noch die "FTP-Latenz" dazu.

    2. Gibt es doch sicherlich eine einfachere Möglichkeit und

    Definiere "einfacher"! ;-)

    3. dann noch die Abfrage ob die Quelldatei neuer als die Zieldatei ist?

    Habt ihr Ideen und oder Vorschläge?

    Je nach den konkreten Bedingungen, könntest Du probieren, für die eigentlichen Copy-Jobs robocopy einzusetzen.

    Hoffentlich habe ich mich verständlich ausgedrückt.

    Das merkst Du, wenn wir die richtigen Tipps geben. ;-)

    Nach Deiner Erklärung sollte folgender Code-Schnipsel eigentlich genügen ...

    $quelle = 'C:\Temp'
    $ziel = 'C:\Temp\Neu'
    
    Get-ChildItem -Path $quelle -Filter * -Recurse | 
        ForEach-Object {
            Copy-Item -Path $_.FullName -Destination $ziel
        }
    Es sei denn, Du hast uns essenzielle Informationen vorenthalten. ;-)

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''


    • Bearbeitet BOfH-666 Freitag, 28. Februar 2020 13:40
    • Als Antwort markiert JOOP156 Samstag, 29. Februar 2020 14:25
    Freitag, 28. Februar 2020 13:39
  • Danke dir, sieht ersten viel sinnvoller aus als meins und läuft auch deutlich schneller.

    Ich habe den Filter noch auf *.JPG gesetzt. Nun läuft es. Hast du auch eine Idee wie ich darin noch eine Abfrage baue ob Quelldatei neuer als die Zieldatei ist?

    Samstag, 29. Februar 2020 14:25
  • Hast du auch eine Idee wie ich darin noch eine Abfrage baue ob Quelldatei neuer als die Zieldatei ist?

    hmmm ... das hängt ein wenig von den Vorbedingungen ab. Wenn es um, wie Du sagst, sehr viele Dateien geht, wäre es besser robocopy zu benutzen. Da Du aber die originale Ordnerstruktur nicht mitnehmen möchtest, musst Du das dann eben für jeden Ordner separat aufrufen. robocopy kopiert im Standard sowieso nur neuere Dateien. Du brauchst also nicht explizit vorher zu prüfen, ob die vorhandene Datei neuer ist.

    Probier ma so ... sollte klappen ... 

    $quelle = 'C:\Temp'
    $ziel = 'C:\Temp\Neu'
    
    Get-ChildItem -Path $quelle -Directory -Recurse | 
        ForEach-Object {
            robocopy $_.FullName $ziel *.jpg  /XJF /NP /NS /NC /NFL /NDL /NJH /NJS
        }
    Wie immer ... bitte erst an "Test-Daten" ausprobieren ... oder ein Backup der Original-Daten bereithalten.  ;-) 


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Samstag, 29. Februar 2020 15:40
  • An sich funktioniert das Script mit kleinen Änderungen ("\") und eine Abfrage ob der Ordner "ORD" enthält oder etwas anderes. Nur leider ist das Script dermaßen langsam, dass ich das so nicht verwenden kann. Tatsächlich ist das Copy-Item hier sehr viel schneller.

    Hast du eine Idee, wie ich das mit Copy-Item Abfrage ob eine Datei neuer ist als die schon vorhandene? Dann soll er nämlich kopieren, sonst nicht.

    Montag, 2. März 2020 13:47
  •  Nur leider ist das Script dermaßen langsam, dass ich das so nicht verwenden kann. 

    Üblicherweise ist robocopy um Größenordnungen schneller als die reine Powershell. Zeigst Du mal bitte, Deinen geänderten kompletten Code? Ich kann mir nur vorstellen, dass Du da versehentlich eine Bremse eingebaut hast. Gibt es denn unterhalb des Basis-Ordners noch viele Ordner, die keine zu kopierenden Dateien enthalten?

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    • Bearbeitet BOfH-666 Montag, 2. März 2020 17:31
    Montag, 2. März 2020 17:29
  • Moin,

    war gestern nicht mehr online, deswegen erst jetzt :)

    Hier ist mein gesamter Code. Lokal läuft das alles sehr gut, aber sobald ich auf den FTP umstelle benötigt er pro Ordner circa 30 Sekunden. Mit dem Powershellscript was ich zuerst gepostet habe dauert es 62 Minuten für alle 7000 Ordner und darin jeweils 2-8 Bilder. Mit dem

    Es gibt bei den 7000 Ordner nur circa 30-60 Ordner, welche keine Unterdateien enthalten.

    $anfang = Get-Date
    
    $quelle = 'C:\Temp\q2\'
    $ziel = 'C:\Temp\Neu'
    
    Get-ChildItem -Path $quelle -Directory -Recurse | 
        ForEach-Object {
    
        if ($_.FullName -like "*SYS*")
        {
            robocopy $_.FullName $ziel *.JPG *.JPEG *.BMP *.PNG *.jpg *.jpeg *.bmp *.png *.tif *.TIF  /XJF /NS /NC /NFL /NDL /NJH /NJS /MT:50
        }
        }
    
    $ende = Get-Date
    $e = ($ende - $anfang).TotalMinutes
    write-host "Der Kopiervorgang lief" $e "Minuten" -ForegroundColor Green


    • Bearbeitet JOOP156 Dienstag, 3. März 2020 07:11
    Dienstag, 3. März 2020 06:40
  • Hier ist mein gesamter Code. Lokal läuft das alles sehr gut, aber sobald ich auf den FTP umstelle benötigt er pro Ordner circa 30 Sekunden.

    Oooops ... wie? ... FTP? ... das hatte ich in Deinem ersten Post ganz überlesen. Mir ist gar nicht bekannt, dass Powershell einen transparenten FTP-Zugriff böte!? ;-)  Bist Du Dir sicher, dass die Dateien per FTP übertragen werden?

    Mit dem Powershellscript was ich zuerst gepostet habe dauert es 62 Minuten für alle 7000 Ordner und darin jeweils 2 - 8 Bilder.

    Es gibt bei den 7000 Ordner nur circa 30-60 Ordner, welche keine Unterdateien enthalten.

    OK, je nach Latenz der "FTP"-Verbindung, halte ich 62 Minuten für einen guten Wert. Wenn das ganze nicht zeitkritisch ist, wäre meine Empfehlung, das so im Hintergrund laufen zu lassen. Man muss ja nicht vor der Konsole sitzen bleiben und den Bytes zuschauen, oder? ;-)

    Wenn Du doch unbedingt möchtest, dass das Ganze deutlich schneller geht, würde es sich eventuell lohnen, zu prüfen, ob man am "anderen Ende" - also auf dem Quell-Server - nicht schon eine entsprechende Aufbereitung der zu übertragenden Dateien vornehmen könnte. Es ist üblicherweise aufwändiger und länger viele kleine Dateien zu übertragen, als z.B. eine komprimierte große Datei.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Dienstag, 3. März 2020 20:53
  • Also es ist ein entfernter FTP Server der aber in der Domäne mit eingebunden ist. Also kann ich über ein Netzlaufwerk darauf zugreifen.

    Es kann teilweise sehr zeitkritisch sein, da es sich um Ware handelt, die über eine andere Schnittstelle Online gestellt wird.

    Deswegen wäre meine Idee gewesen: Nur Kopieren wenn Quelldatei neuer als die Zieldatei ist. Aber leider bin ich zu dumm dieses zu "bauen" :D 

    Vielleicht habe ich auch einfach zu wenig Erfahrung.

    Mittwoch, 4. März 2020 13:43
  • Also es ist ein entfernter FTP Server der aber in der Domäne mit eingebunden ist. Also kann ich über ein Netzlaufwerk darauf zugreifen.

    OK, dass das ein FTP-Server ist, ist hier also gar nicht relevant, weil Du ihn auch per SMB erreichst, richtig? Was ist es denn für ein Server? Ist das vielleicht auch ein Windows-Server, auf dem man vielleicht auch Powershell-Skripte ausführen könnte? Häufig ist eine zu überwindende Netzwerkstrecke der limitierende Flaschenhals. Wenn Skripte rein lokal laufen, sind die meistens deutlich schneller. Wenn das also auch ein Windows-Server ist, könnte man die nötigen Informationen auf dem Server dort "lokal" einsammeln und nur diese übertragen.

    Es kann teilweise sehr zeitkritisch sein, da es sich um Ware handelt, die über eine andere Schnittstelle Online gestellt wird.

    Teilweise .... ? Wenn das ein unternehmenskritischer Prozess ist, sollte man vielleicht "größere Geschütze" auffahren, als nur ein paar selbst gebastelte Zeilen Code!?

    Deswegen wäre meine Idee gewesen: Nur Kopieren wenn Quelldatei neuer als die Zieldatei ist. .... Vielleicht habe ich auch einfach zu wenig Erfahrung.

    Na dafür hast Du ja jetzt uns ... ;-) Das macht den Code-Schnipsel vom Anfang aber gleich wieder deutlich komplexer und auch vermutlich wieder etwas langsamer:

    $quelle = 'C:\Temp'
    $ziel = 'C:\Temp\Neu'
    $Include = @(
        '*.JPG',
        '*.JPEG',
        '*.BMP',
        '*.PNG',
        '*.jpg',
        '*.jpeg',
        '*.bmp',
        '*.png', 
        '*.tif', 
        '*.TIF'
    )
    Get-ChildItem -Path $quelle -Include $Include -Recurse | 
    ForEach-Object {
        $zielDateiPfad = Join-Path -Path $ziel -ChildPath $_.Name
        if (Test-Path -Path $zielDateiPfad) {
            $zielDatei = Get-Item -Path $zielDateiPfad
            if ($zielDatei.LastWriteTime -lt $_.LastWriteTime) {
                Copy-Item -Path $_.FullName -Destination $ziel -Force
            }
        }
        else {
            Copy-Item -Path $_.FullName -Destination $ziel -Force
        }
    }

    Erstmal musst Du ja prüfen, ob die Zieldatei überhaupt schon vorhanden ist. Wenn sie das ist, musst Du die letzte Zugriffszeit/ÄnderungsZeit/Erstellungszeit ermitteln, bevor Du diese jetzt mit der Quelldatei vergleichen kannst. Je nach dem, welche Zeit Du benutzen willst, musst Du den Code natürlich anpassen. Sollte der remote Server kein Windows-Server sein, kann es auch nötig werden die jeweiligen UTC-Zeiten zu benutzen. 

    Wie üblich gibt es, abhängig von der vorhandenen Infrastruktur, zahlreiche denkbare Möglichkeiten, die ganze Prozedur zu beschleunigen.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    • Bearbeitet BOfH-666 Donnerstag, 5. März 2020 02:08
    Donnerstag, 5. März 2020 00:01
  • OK, dass das ein FTP-Server ist, ist hier also gar nicht relevant, weil Du ihn auch per SMB erreichst, richtig? Was ist es denn für ein Server? Ist das vielleicht auch ein Windows-Server, auf dem man vielleicht auch Powershell-Skripte ausführen könnte? Häufig ist eine zu überwindende Netzwerkstrecke der limitierende Flaschenhals. Wenn Skripte rein lokal laufen, sind die meistens deutlich schneller. Wenn das also auch ein Windows-Server ist, könnte man die nötigen Informationen auf dem Server dort "lokal" einsammeln und nur diese übertragen.

    Ja es ist ein Windows Server. Das Problem ist: Server 1 (entfernter Rechner im Rechenzentrum -> kopiert zu einem Server in unserem Serverschrank). Wo ich das Script laufen lasse ist dann glaube ich egal. Der Kopiervorgang geht sowieso über die Datenleitungen und nicht nur lokal. 

    Teilweise .... ? Wenn das ein unternehmenskritischer Prozess ist, sollte man vielleicht "größere Geschütze" auffahren, als nur ein paar selbst gebastelte Zeilen Code!?

    Also um das nochmal kurz zu erklären: Mein Script läuft ist hoffentlich schnell genug fertig und dann läuft das Tool, welches die Schnittstelle zur Onlineplattform stellt. Das Problem hierbei ist, wenn das Script nicht schnell genug fertig ist, fehlen Artikel, die dann erst 6 Stunden später auf der Homepage online sind.


    Na dafür hast Du ja jetzt uns ... ;-) Das macht den Code-Schnipsel vom Anfang aber gleich wieder deutlich komplexer und auch vermutlich wieder etwas langsamer:

    $quelle = 'C:\Temp'
    $ziel = 'C:\Temp\Neu'
    $Include = @(
        '*.JPG',
        '*.JPEG',
        '*.BMP',
        '*.PNG',
        '*.jpg',
        '*.jpeg',
        '*.bmp',
        '*.png', 
        '*.tif', 
        '*.TIF'
    )
    Get-ChildItem -Path $quelle -Include $Include -Recurse | 
    ForEach-Object {
        $zielDateiPfad = Join-Path -Path $ziel -ChildPath $_.Name
        if (Test-Path -Path $zielDateiPfad) {
            $zielDatei = Get-Item -Path $zielDateiPfad
            if ($zielDatei.LastWriteTime -lt $_.LastWriteTime) {
                Copy-Item -Path $_.FullName -Destination $ziel -Force
            }
        }
        else {
            Copy-Item -Path $_.FullName -Destination $ziel -Force
        }
    }

    Erstmal musst Du ja prüfen, ob die Zieldatei überhaupt schon vorhanden ist. Wenn sie das ist, musst Du die letzte Zugriffszeit/ÄnderungsZeit/Erstellungszeit ermitteln, bevor Du diese jetzt mit der Quelldatei vergleichen kannst. Je nach dem, welche Zeit Du benutzen willst, musst Du den Code natürlich anpassen. Sollte der remote Server kein Windows-Server sein, kann es auch nötig werden die jeweiligen UTC-Zeiten zu benutzen. 

    Wie üblich gibt es, abhängig von der vorhandenen Infrastruktur, zahlreiche denkbare Möglichkeiten, die ganze Prozedur zu beschleunigen.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Echt ganz großes Dankeschön, dass du dich für mich schon so lange mit dem Script beschäftigt hast. Ich schaue mir das ganze nochmal an und melde mich wahrscheinlich sowieso nochmal :)
    • Bearbeitet JOOP156 Donnerstag, 5. März 2020 10:21
    • Als Antwort markiert JOOP156 Freitag, 6. März 2020 13:06
    Donnerstag, 5. März 2020 06:31
  • ... Wo ich das Script laufen lasse ist dann glaube ich egal.

    Hmmmm .... Jein. ;-) Dir geht es ja darum, die zu übertragende Datenmenge möglichst auf das absolut Nötigste zu reduzieren und das Ganze auch möglichst schnell zu erledigen, richtig? Du könntest also auf dem remote Server (dort quasi lokal) die nötigen Informationen für den Vergleich einsammeln, nur diese auf den lokalen Server übetragen und damit den Vergleich durchführen. Das Ergebnis benutzt Du dann dafür, nur die gewünschten Dateien zu übertragen.

    Man kann z.B. robocopy dazu "missbrauchen", einfach alle Dateien mit deren Größe und Zeitstempel aufzulisten. Diese Ausgabe kann man entsprechend aufbereiten und Dateiname, Pfad, Göße und Zeitstempel herauslösen. Wenn Du nur noch diese Information z.B. als Text-Datei übertragen musst, sollte das deutlich schneller sein als diese Infos alle remote über die Netzwerkverbindung zu ermitteln.

    Na dem Vergleich der gewünschten Kriterien, bleibt dann nur noch die Liste der zu kopierenden Dateien übrig. Je nach den Bedingungen, kann das schneller sein als der jetzige Ansatz.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 5. März 2020 13:06
  • Ich wollte nur nochmal melden, dass es so wie es jetzt läuft, einwandfrei funktioniert. Der erste Durchgang mit 45GB Fotos dauert nun noch eine Stunde. Danach der Durchlauf nur noch wenige Minuten! Riesen Großes Dankeschön! Deinen letzten Ansatz werde ich aber wahrscheinlich auch nochmal versuchen in einer ruhigen Minute zu bauen.

    Schönes Wochenende!

    Freitag, 6. März 2020 13:06