2016-03-31 7 views
0

私が$destinationの配列を設定した場合、これを動作させることができますが、選択したディレクトリごとに別々の.zipが作成されます。System.IO.Compression.ZipFile複数のディレクトリ

すべてのディレクトリを選択し、複数の宛先ファイルではなく単一の宛先で圧縮するにはどうすればよいですか?ここに私のコードは次のとおりです。

$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) 
} 

私はそれが私がそれらを選択し、配列として保存することができ、単一のディレクトリまたは複数のだならば、それはそうである方法私のOut-GridViewオプションを維持したいです。

+0

Powershell v5を使用している場合、これはかなり簡単に行うことができます。 – Kiran

+0

はいpowershell v5 –

答えて

0

-updateパラメータは、既存のアーカイブがout-gridviewから選択した新しいエントリで更新されることを確認します。

$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

これはアーカイブが存在しない場合に作成することを除いて、ほぼ正確に私が望むものです。私はそれがパラメータフラグだと確信していますが、私はこれを実現させるために100%確実ではありません。 –

+0

さて、私はそれが今働いていると思うが、私はどのようにグリッドビューのディレクトリパス以上のものを表示するのですか?私はまた、ディレクトリの内容を表示したい。 –

+0

それは今働いています。私は、私たちの会社から使用するためにこのスクリプトを配布するすべてのユーザーがバージョン5を持っているわけではないことを認識しました。バージョン4に相当するものはありますか? –

関連する問題