2016-03-31 12 views
0

Ich kann dies zum Funktionieren bringen, wenn ich ein Array für meine $destination einrichten, aber dies erstellt eine separate. Zip für jedes ausgewählte Verzeichnis.System.IO.Compression.ZipFile mehrere Verzeichnisse

Wie kann ich jedes Verzeichnis auswählen und unter einem einzigen Ziel zippen statt mehrere Zieldateien? Hier ist mein Code:

$type = "*.txt" 
$destination = "LogsBackup.zip" 

Add-Type -Assembly "System.IO.Compression.FileSystem" ; 

$_sources = dir c:\Logs\$type -Recurse | Select Directory -Unique | 
      Out-GridView -OutputMode Multiple | 
      Select @{Name="Path";Expression={$_.Directory -As [string]}} 

for ($i = 0; $i -lt $_sources.Length; $i++) 
{ 
    $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal 
    [System.IO.Compression.ZipFile]::CreateFromDirectory($_sources[$i].Path , $destination) 
} 

Ich möchte meine Out-GridView Option, um die Art und Weise halten es so ist, wenn es sich um ein einzelnes Verzeichnis oder mehrere, das ich ihnen auswählen und speichern sie als Array zurück.

+0

Wenn Sie auf PowerShell v5 sind, kann dies ziemlich einfach durchgeführt werden. – Kiran

+0

Ja seine Powershell v5 –

Antwort

0

Der Parameter -update stellt sicher, dass Ihr vorhandenes Archiv mit neuen Einträgen aktualisiert wird, die Sie unter out-gridview auswählen.

$destination = "C:\logs\LogsBackup.zip" 

#Create a single archive 
Get-ChildItem -Path C:\logs -Filter *.txt -Recurse | 
    Select @{Name="Path";Expression={$_.DirectoryName}} -Unique | 
     Out-GridView -PassThru | Compress-Archive -CompressionLevel Optimal -DestinationPath $destination -Update 
+0

Dies ist fast genau das, was ich will, außer ich möchte es das Archiv erstellen, wenn es nicht existiert. Ich bin mir sicher, dass es eine Parameterflagge ist, aber ich bin nicht 100% sicher, dass dies möglich ist. –

+0

Okay, ich denke, ich habe es jetzt funktioniert, aber wie zeige ich mehr als nur den Verzeichnispfad in der Gridview. Ich möchte auch den Inhalt des Verzeichnisses anzeigen. –

+0

Es funktioniert jetzt. Ich habe nur gemerkt, dass nicht alle Benutzer, die ich dieses Skript verwenden werde, die Version 5 haben. Gibt es eine Entsprechung für Version 4? –

Verwandte Themen