derronson
Goto Top

Powershell Zufügen von Dateien zu einem bestehenden Zipcontainer

Hallo liebe Community,
ich selbst bin Powershell Neuling und wurde nun damit betraut ein Script zu erstellen, welches ausgewählte Dateien in eine Zipdatei schreibt. So weit so gut, doch nun soll geprüft werden, ob diese Datei schon existiert und ob Inhalt der selbige ist.
Funktioniert erstmal, doch bei Existenz und abweichendem Inhalt soll der zusätzliche Inhalt dem Zipcontainer zugefügt werden.
Da liegt nun mein Problem: Wie füge ich Dateien zu einem bestehenden Zipfile zu? Im Script habe ich das Zipping via PSCX gelöst, falls das zur Problemlösung beiträgt.

Content-Key: 286916

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

Printed on: April 25, 2024 at 23:04 o'clock

Mitglied: 114757
114757 Oct 28, 2015 updated at 10:33:08 (UTC)
Goto Top
# 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 "C:\temp\*.txt"  
# ZIP-Datei im Update -Modus öffnen
$zip = [System.IO.Compression.ZipFile]::Open("C:\temp\myfile.zip",[System.IO.Compression.ZipArchiveMode]::Update)  
# Dateien zur ZIP-Datei hinzufügen
$files | %{[void][System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip,$_.FullName,$_.Name)}
# Ressourcen freigeben
$zip.Dispose()
Gruß jodel32
Member: derronson
derronson Oct 28, 2015 at 10:34:47 (UTC)
Goto Top
Vielen Dank für die schnelle Antwort, wird gleich ausprobiert.
Member: derronson
derronson Oct 28, 2015 at 10:45:08 (UTC)
Goto Top
Super, Script läuft erstmal, muss jetzt noch mit den veränderten Werten getestet werden.
Danke nochmal
Member: derronson
derronson Oct 28, 2015 at 11:00:33 (UTC)
Goto Top
Okay grundsätzlich funktioniert das ganze, Problem ist jetzt allerdings, dass nicht nur die Unterschiede in den Container geschrieben werden sondern die komplette Suche wird dort als mit eingefügt. Dies bläht jetzt aber meiner Meinung nach die Datei unnötig auf. Hier mal mein Script, vielleicht kann mal hier etwas optimieren:
#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"

#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
{
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.IO.Compression.FileSystem
$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()
}
}