derronson
Goto Top

Dateien zu bestehendem Zip-Archiv zufügen

Hallo liebe Gemeinde, hatte gestern das Problem schon gepostet, bekam auch schnell Hilfe, nochmals danke dafür. Allerdings läuft mein Script noch nicht so richtig rund. Erstmaliges Durchlaufen des Scriptes erstellt wie gewünscht den Ordner mit Datumsanzeige. Jetzt mein Problem: Verändere ich jetzt den Ausgangspfad(füge Dateien mit passendem Änderungsdatum hinzu), wird nochmal ein komplettes Zip-Archiv erstellt, welches dann in das bestehende Archiv integriert wird. Ohne Veränderung des Ausgangs, kann das Script beliebig oft durchlaufen werden, ohne das dem Archiv etwas zugefügt wird. Bei einem einmalig verändertem Ausgangspfad und mehrfachem Durchlaufen des Scriptes wird so oft wie das Script durchlaufen wird , die Suche mit in das Archiv integriert, obwohl keine neuen Dateien mit entsprechendem Datumsintervall zugefügt wurden. Wie lässt sich das jetzt beheben?
Hier mal mein Ansatz:
#PowerShell Community Extensions einlesen
Import-Module Pscx
#Variablen, die später als Parameter übergeben werden
$pfad = "c:\test"
$pfadausgabe ="c:\test\test.zip"
$datum1 = "08/01/2015"
$datum2 = "10/22/2015"
#Abbruch bei Fehler
$ErrorActionPreference = "stop"
#filtern nach gesuchten Dateien
$zwischenSpei = ls $pfad | Where-Object {$_.LastWriteTime -gt $datum1} | Where-Object {$_.LastWriteTime -lt $datum2}
#Zippen der gesuchten Dateien
Write-Zip $zwischenSpei -outputpath $pfadausgabe
#Namensgebung
$split = $datum1.Split("/")
$datum_name1 = $split[2] + "_" + $split + "_" + $split[1]
$split = $datum2.Split("/")
[string]$datum_name2 = $split[2] + "_" + $split + "_" + $split[1]
$newname = "c:\test\" + $datum_name1 + "-" + $datum_name2 + ".zip"
#existiert gesuchte Datei nicht
#gib der Zipdatei den Namen $newname
if(!(Test-Path -Path $newname))
{
Rename-Item $pfadausgabe $newname
}
#andernfalls Datei existiert
#prüfe nach Gleichheit
else
{
if(((Get-FileHash $pfadausgabe).hash) -eq ((Get-FileHash $newname).hash))
{
#bei Gleichheit lösche
rm $pfadausgabe
}
else
#bei Ungleichheit
{
  1. Asemblies laden (benötigt mindestens .NET 4.5 und Powershell 3.0)
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.IO.Compression.FileSystem
#Dateien spezifizieren welche hinzugefügt werden sollen
$files = gci $pfadausgabe
$zip = [System.IO.Compression.ZipFile]::Open($newname,[System.IO.Compression.ZipArchiveMode]::Update)
$files | %{[void][System.IO.Compression.ZipfileExtensions]::CreateEntryFromFile($zip,$_.FullName,$_.Name)}
$zip.Dispose()
#an dieser Stelle die gezippten Daten löschen???
#rm $zwischenSpei
}
}
return 0

Content-Key: 287026

Url: https://administrator.de/contentid/287026

Printed on: April 16, 2024 at 16:04 o'clock