2016-05-30 16 views
2

Ich weiß, es wurde viel geschrieben (und gefragt) über das Zippen von Dateien mit PowerShell, aber trotz all meiner Suchen und Tests konnte ich nicht mit dem, was ich brauche, kommen.PowerShell - Zip spezifische Dateien in einem Ordner

Wie pro Thema arbeite ich an einem Skript, das in einem bestimmten Zeitbereich für

$a= Get-ChildItem - path $logFolder | 
Where-Object {$_.CreationDate -gt $startDate -and $_.CreationDate -lt $endDate} 

erstellten Dateien ein im Verzeichnis überprüfen Während ich die Liste der Dateien bekommen kann ich will/muss ich nicht finden kann Möglichkeit, sie an eine Zip-Datei zu senden.

Ich habe wie

verschiedene appraoches versucht
$sourceFolder = "C:\folder1" 
$destinationZip = "c:\zipped.zip" 
[Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") 
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourceFolder, $destinationZip) 

Aber während dies gut funktioniert, wenn Sie einen Ordner zippen, was es nicht, denn ich bin auf der Suche, sicher genug konnte ich Dateien in einen temporären Ordner verschieben und zip, dass aber sieht aus wie eine Verschwendung und ich bin sicher, es gibt bessere Möglichkeiten, dies zu tun.

Denken Sie daran, dass ich keine Drittanbieter-Tools wie 7zip usw. verwenden kann. Ich kann weder PowerShell-Erweiterungen noch PowerShell 5 verwenden (was mein Leben so einfacher machen würde).

Ich bin ziemlich sicher Antwort ist ziemlich einfach und in Sichtweite, aber mein Gehirn ist in einer Schleife und ich kann nicht herausfinden, wie weiter so jede Hilfe würde sehr geschätzt werden.

Antwort

3

Sie können die Sammlung der gefilterten Dateien durchlaufen und sie einzeln einem Archiv hinzufügen.

# creates empty zip file: 
[System.IO.Compression.ZipArchive] $arch = [System.IO.Compression.ZipFile]::Open('D:\TEMP\arch.zip',[System.IO.Compression.ZipArchiveMode]::Update) 
# add your files to archive 
Get-ChildItem - path $logFolder | 
Where-Object {$_.CreationDate -gt $startDate -and $_.CreationDate -lt $endDate} | 
foreach {[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($arch,$_.FullName,$_.Name)} 
# archive will be updated with files after you close it. normally, in C#, you would use "using ZipArchvie arch = new ZipFile" and object would be disposed upon exiting "using" block. here you have to dispose manually: 
$arch.Dispose() 
+0

Wie gesagt ich wickelte meinen Kopf um etwas wirklich albernes. Ich versuchte sogar eine ähnliche appraoch, nicht sicher, aber ich denke, dass es von einem Ihrer älteren Beiträge/Antworten war, aber nicht funktionierte. Ich habe das Beispiel geändert, um meine spezifischen Bedürfnisse zu erfüllen, nichts stellar ich einfach den Quell-und Zielordner als Parameter angeben, aber abgesehen davon funktioniert es perfekt! Vielen vielen Dank. – Clariollo

Verwandte Themen