Kategorien
CodeArchiv Powershell

Powershell Dateien je nach Bearbeitungsdatum in ZIP Archiv überführen

Beschreibung

Ein kleines Script welches in einem angegebenen Verzeichnis alle Dateien, die einem Filter entsprechen, in ein tägliches ZIP Archiv überführen. Berücksichtigt wird das Bearbeitungsdatum. Nach dem erfolgreichen hinzufügen zu einem Archiv wird die Original Datei gelöscht.

Entstanden ist das Script, da eine Anwendung die Logdateien von einem Programm meine Festplatte voll geschrieben haben.

Parameter

Die Parameter werden im Script hinterlegt! Es ist keine klassische Funktion kann aber ohne Aufwand in eine geändert werden.

Parameter NameParameter Wert
$strPathPfad in dem nach den zu archivierenden Dateien gesucht werden soll
$intDaysBis wieviel Tage zum aktuellen Datum sollen die Dateien archiviert werden?
$strFilterDateinamen Filter. (z.B. *.log)

Code

clear-host
$strPath = "d:\WindowsUpdate"
$intDays = -1
$strFilter = "*.etl"
write-host "Check the Path $strPath for Files with Filter $strFilter that are older than $intDays Day(s) and compress them in a ZIP file for every day!"
$files = Get-ChildItem -Filter $strFilter -Path $strPath | SELECT Name, LastWriteTime
$CurrentDay = Get-Date 
$CurrentDay = $CurrentDay.AddDays($intDays)
for ($i=0;$i -lt $files.count; $i++) {
    $datum = Get-Date $files[$i].LastWriteTime
    $strDatum = Get-Date $files[$i].LastWriteTime -Format yyyyMMdd
    if ($datum -le $CurrentDay){
        $zipfilename = $strpath + "\" + $strDatum + ".zip"
        $fileToZip = $strpath + "\" + $files[$i].Name 
        write-host "Put $fileToZip in $zipfilename!"
        if (Test-Path ($zipfilename)){
            $compress = Compress-Archive -LiteralPath $fileToZip -Update -DestinationPath $zipfilename
        }else{
            Compress-Archive -LiteralPath $fileToZip -CompressionLevel Optimal -DestinationPath $zipfilename
        }
        Remove-Item $fileToZip
    }
}

Download