none
Dateien nur überschreiben wenn sie ein paar Tage alt sind?

    Frage

  • könnte man das irgendwie noch einfacher lösen (ohne eine mathematisch Doktorarbeit daraus zu machen)? Mein Kollege meint er könnte den Code nicht lesen. Wenn man ihn nach 1/2 Jahr wieder liest und kein Programmierer ist, ist es wirklich nicht ganz einfach das mit dem Datum zu verstehen!

    Aufgabe: wir sichern uns von den Win7 und Win 10 Benutzern ein paar wichtige Dateien und die derzeit gemappten Drucker.

    wenn nun ein Benutzer auf Windows 10 umgestellt wird (oder er wird neu aufgesetzt) bekommt er ein neues leeres Profil und es sollen diese Dateien nicht mit den leeren neuen Informationen überschrieben werden, da wir diese Information wieder mittels PS wieder importieren.

        $PrinterFileDate = ((Get-ItemProperty -Path "\\server\share\$($env:USERNAME)\Backup\DefaultPrinter.csv").LastWriteTime).AddDays(3)
        $PrinterFileDateStr = ($PrinterFileDate).ToString("yyyy-m-dd")
        $heute = (Get-Date).ToString("yyyy-m-dd")
        if($heute -gt $PrinterFileDateStr){
             
            $DefaultPrinter = Get-WmiObject -Query " SELECT * FROM Win32_Printer" 
            $DefaultPrinter | export-csv -path "\\server\share\$($env:USERNAME)\Backup\DefaultPrinter.csv" -Encoding UTF8
            $env:computername | Out-File -filepath "\\server\share\$($env:USERNAME)\Backup\Computername.txt"
            Copy-Item -Path $env:appdata\Microsoft\Templates\normal.dotm -Destination "\\server\share\$($env:USERNAME)\Backup"
            Copy-Item -Path $env:appdata\Microsoft\Templates\NormalEmail.dotm -Destination "\\server\share\$($env:USERNAME)\Backup"
            Copy-Item -Path "$env:appdata\Microsoft\Document Building Blocks\1031\15\Built-In Building Blocks.dotx" -Destination "\\server\share\$($env:USERNAME)\Backup"
    
        }


    Chris



    • Bearbeitet -- Chris -- Donnerstag, 9. August 2018 09:13
    Donnerstag, 9. August 2018 08:20

Antworten

  • Hmmm ... wenn der Code läuft, warum ihn ohne Not ändern? Ich würde bestenfalls ein oder zwei erklärende Kommentare hinzufügen und/oder, wie Du schon selbst sagst, einen weiteren Check ergänzen, der ein Überschreiben verhindert, wenn es nötig ist.

    Best regards,

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

    • Als Antwort markiert -- Chris -- Donnerstag, 9. August 2018 09:45
    Donnerstag, 9. August 2018 09:40
  • Die einzige Vereinfachung sehe ich darin, die ToString-Aufrufe zu streichen.
    also

    if (
    Get-Date -gt  
    (Get-ItemProperty -Path "\\server\share\$($env:USERNAME)\Backup\DefaultPrinter.csv").LastWriteTime.AddDays(3)
    )

    da beide Funktionen ein DateTime-Objekt zurückgeben.
    Der einzige Unterschied ist, dass durch die Uhrzeit die Differenz jetzt eher 72 Stunden entspricht als 3 uhrzeitunabhängige Kalendertage.

    Aber auch mir erschließt sich dein eigentliches Problem nicht.

    • Als Antwort markiert -- Chris -- Donnerstag, 9. August 2018 11:30
    Donnerstag, 9. August 2018 10:18

Alle Antworten

  • Hmmm .... was ist jetzt die eigentliche Frage? Funktioniert der Code nicht? Funktioniert er falsch? Was Du beschreibst, hat, so wie ich es verstanden habe, keinen Bezug zu einem Datum oder einer Zeitspanne.

    Best regards,

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

    Donnerstag, 9. August 2018 09:04
  • Code funktioniert. Die Frage wäre ob es eine andere einfache Logik gäbe damit die Sicherungsdaten nicht mit leeren Daten überschreiben werden. Daher der Code mit dem Datum. .AddDays(3)

    Leider ein bisschen unleserlich.

    ich hoffe die Aufgabenstellung war soweit verständlich. Du musst dir vorstellen, wenn du zb. bei dir ein neues Windows Profil  bekommst soll zb.  deine leere Word Normal.dot (mit allen Autotexten Default Schriften) nicht auf die Sicherung Backup kopiert werden, dann du ja dann keine Sicherung mehr hättest.

    $PrinterFileDate = ((Get-ItemProperty -Path "\\server\share\$($env:USERNAME)\Backup\DefaultPrinter.csv").LastWriteTime).AddDays(3)
        $PrinterFileDateStr = ($PrinterFileDate).ToString("yyyy-m-dd")
        $heute = (Get-Date).ToString("yyyy-m-dd")
        if($heute -gt $PrinterFileDateStr){
    

    ich habe auch schon überlegt ein Check oder Logfile zu schreiben. Diese wäre dann leichter mit einen Einzeile zu überprüfen?

    Außer du hast noch eine andere Anregung. Ansonsten belasse ich den Code so, da er ja gut funktioniert.


    Chris

    Donnerstag, 9. August 2018 09:20
  • Hmmm ... wenn der Code läuft, warum ihn ohne Not ändern? Ich würde bestenfalls ein oder zwei erklärende Kommentare hinzufügen und/oder, wie Du schon selbst sagst, einen weiteren Check ergänzen, der ein Überschreiben verhindert, wenn es nötig ist.

    Best regards,

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

    • Als Antwort markiert -- Chris -- Donnerstag, 9. August 2018 09:45
    Donnerstag, 9. August 2018 09:40
  • Die einzige Vereinfachung sehe ich darin, die ToString-Aufrufe zu streichen.
    also

    if (
    Get-Date -gt  
    (Get-ItemProperty -Path "\\server\share\$($env:USERNAME)\Backup\DefaultPrinter.csv").LastWriteTime.AddDays(3)
    )

    da beide Funktionen ein DateTime-Objekt zurückgeben.
    Der einzige Unterschied ist, dass durch die Uhrzeit die Differenz jetzt eher 72 Stunden entspricht als 3 uhrzeitunabhängige Kalendertage.

    Aber auch mir erschließt sich dein eigentliches Problem nicht.

    • Als Antwort markiert -- Chris -- Donnerstag, 9. August 2018 11:30
    Donnerstag, 9. August 2018 10:18