PowerShellを使用してZIPアーカイブを作成してファイルを解凍するにはどうすればよいですか?
PowerShellの機能を使用して、ZIPアーカイブを作成して抽出できます。 PowerShell 5.0(このPowerShellバージョンはデフォルトでWindows 10にインストールされます)では、別のモジュール Microsoft.PowerShell.Archive 利用可能です。古いバージョンのWindowsでは、 ZipFileを使用できます。 アーカイブ用の.NETFrameworkのクラス。
Microsoft.PowerShell.Archiveモジュール(C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ Microsoft.PowerShell.Archive)には2つのコマンドレットしかありません:
- 圧縮-アーカイブ
- 拡張-アーカイブ
Get-Command -Module Microsoft.PowerShell.Archive | Format-Table -AutoSize
CommandType Name Version Source ----------- ---- ------- ------ Function Compress-Archive 1.0.1.0 Microsoft.PowerShell.Archive Function Expand-Archive 1.0.1.0 Microsoft.PowerShell.Archive
これらのコマンドレットを使用して、PowerShellスクリプトでZIPアーカイブを作成および抽出する例を見てみましょう。
PowerShell:Compress-Archiveを使用してZIPアーカイブを作成する
Compress-Archiveコマンドの構文は次のとおりです。
Compress-Archive [-Path] String[] [-DestinationPath] String [-CompressionLevel String ] [-Update]
- パス パラメータは、アーカイブするファイルまたはフォルダへのパスを指定するために使用されます。
- DestinationPath –ZIPファイルへのパスを指定します。
- 圧縮レベル –圧縮レベルを設定します(
NoCompression
、Optimal
またはFastest
); - 更新 –既存のZIPアーカイブにファイルを追加(更新)できます。
- 強制 –指定した名前のアーカイブがすでに存在する場合は、上書きされます。
- 最適 —圧縮レベルによる最適化;
- 最速 —所要時間による最適化;
- NoCompression —圧縮なし。
NoCompressionオプションは、すでに圧縮されているファイル(jpg、msi、mp3など)を単一のZIPファイルにアーカイブする場合に使用する必要があります。この場合、Windowsはそれらを圧縮するためにCPU時間を浪費しません。
単一のファイルを圧縮するには、次のコマンドを実行します:
Compress-Archive -Path "C:\Logs\WindowsUpdate.log" -DestinationPath C:\Archive\updatelog.zip -CompressionLevel Optimal
複数のフォルダー(すべてのファイルとネストされたフォルダーを含む)のコンテンツ全体をzip形式で圧縮できます。
Compress-Archive -Path C:\Logs\,C:\Logs2\ -DestinationPath C:\Archive\logs-all.zip -CompressionLevel Optimal
特定のマスクを持つファイルのみをZIPアーカイブに追加できます。たとえば、次のコマンドは*.txtファイルのみを圧縮します。
Compress-Archive -Path C:\Logs\*.txt -DestinationPath C:\Archive\logs-txt.zip –CompressionLevel Fastest
Get-ChildItemコマンドレットでは、より複雑なフィルターを使用できます。たとえば、次のスクリプトを使用すると、ディスク上で拡張子が*.docxまたは*.xlsxの上位10個のファイルを検索し、アーカイブに追加できます。
Get-ChildItem c:\share\ITdept -Include *.xlsx –Recurse| sort -descending -property length | select -first 10 |Compress-Archive -DestinationPath C:\backup\itdeptdocs.zip
既存のzipアーカイブに新しいファイルを追加するには、更新を使用します キー:
Compress-Archive -Path C:\Logs\,C:\logs2\ –Update -DestinationPath C:\Archive\logs-txt.zip
Exception calling "Write" with "3" argument(s): "Stream was too long." At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:805 char:29 + ... $destStream.Write($buffer, 0, $numberOfBytesRead) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : IOException
Expand-Archiveを使用してZIPファイルを抽出する方法
Expand-Archiveコマンドレットを使用して、ZIPファイルを解凍できます。コマンドレットの構文は次のとおりです。
Expand-Archive [-Path] String [-DestinationPath] String [-Force] [-Confirm]
たとえば、前に作成したZIPアーカイブを指定したフォルダーに解凍し、ファイルを上書きするには、次のようにします。
Expand-Archive -Path C:\archive\logs-all.zip -DestinationPath c:\logs -Force
Microsoft.PowerShell.Archiveモジュールのデメリット:
- アーカイブを抽出せずにアーカイブの内容を表示することはできません。
- アーカイブから一部のファイルを抽出できません(アーカイブファイル全体を抽出する必要があります)。
- zip以外のアーカイブ形式は使用できません。
- パスワードでZIPアーカイブを保護することはできません。
次のように、7Zip4Powershellモジュールをインストールし、パスワードで保護されたzipファイルを抽出できます。
Install-Module -Name 7Zip4Powershell
Expand-7Zip -ArchiveFileName C:\Archive\Logs.zip -Password "p@ssd0rw" -TargetPath C:\Share\Logs
PowerShellZipFileクラスを使用した圧縮ファイルの操作
以前のWindowsバージョン(PowerShellバージョンが5.0未満のWindows10またはWindowsServer 2016より前(PowerShellバージョンをアップグレードできない場合))では、別のZipFileクラス(NET Framework 4.5から)を使用してzipアーカイブを作成できます。
まず、クラスをPowerShellセッションにロードします。
Add-Type -AssemblyName "System.IO.Compression.FileSystem"
フォルダをアーカイブするには、次のようなPSスクリプトを使用します。
$SourceFolder = 'C:\Logs'
$ZipFileName = 'C:\PS\logs.zip'
[IO.Compression.ZipFile]::CreateFromDirectory($SourceFolder, $ZipFileName)
ZIPアーカイブを更新して圧縮率を設定するには、次のPowerShellコードを使用します。
$addfile = ‘C:\temp\new.log’
$compressionLevel = [System.IO.Compression.CompressionLevel]::Fastest
$zip = [System.IO.Compression.ZipFile]::Open($zipFileName, 'update')[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip, $addfile, (Split-Path $addfile -Leaf), $compressionLevel)
$zip.Dispose()
$zip.Dispose()
コマンドはzipファイルを閉じるために使用されます。 ZIPアーカイブの内容を一覧表示できます:
[System.IO.Compression.ZipFile]::OpenRead($zipFileName).Entries.Name
または、zipアーカイブの内容を、追加情報(圧縮/非圧縮ファイルのサイズ、最終書き込み時間など)を含むOut-GridViewテーブルとして表示できます。
$ZipFileName = "C:\PS\logs1.zip"
$Stream = New-Object IO.FileStream($ZipFileName , [IO.FileMode]::Open)
$ZipArchive = New-Object IO.Compression.ZipArchive($Stream)
$ZipArchive.Entries |
Select-Object Name,
@{Name="File Path";Expression={$_.FullName}},
@{Name="Compressed Size (KB)";Expression={"{0:N2}" -f($_.CompressedLength/1kb)}},
@{Name="UnCompressed Size (KB)";Expression={"{0:N2}" -f($_.Length/1kb)}},
@{Name="File Date";Expression={$_.LastWriteTime}} | Out-GridView
$ZipArchive.Dispose()
$Stream.Close()
$Stream.Dispose()
ZIPファイルをC:\ Logsフォルダーに抽出するには、次のコマンドを使用します。
$SourceZipFile = 'C:\PS\logs.zip'
$TargetFolder = 'C:\Logs'
[IO.Compression.ZipFile]::ExtractToDirectory($SourceZipFile, $TargetFolder)
-
Mac でファイルを解凍して抽出する方法
ZIP は、ユーザーが高度な圧縮技術を使用して 1 つのフォルダーで複数のファイルを簡単に送信または共有できるようにする、一般的なアーカイブ ファイル形式です。そのため、メールを送信したりデータを共有したりする際に大量の添付ファイルを添付するのではなく、代わりに ZIP ファイルを使用するだけで作業を完了することができます。 ZIP ファイルには通常、圧縮されたファイルとデータのバッチが含まれているため、大きなサイズのファイルを一度に比較的高速で送信することもできます。 では、電子メールで ZIP ファイルを受け取った場合、または Web サイトからソフトウェアをダウンロードしているとき
-
Windows 10 で Powershell を使用してファイルを圧縮/解凍する方法
ジップ機能 を使用すると、関連するすべての構成を 1 つのファイルに圧縮して、ファイルをより小さいサイズに圧縮できます。このようにして、このような圧縮された Zip ファイルは、電子メールやその他のファイル共有メディアを介して他のユーザーと簡単に共有できます。 Zip 機能を実行するには、ユーザーは通常、WinRAR や 7-zip などの RAR ソフトウェアを使用します。しかし、組み込みの Windows Powershell を使用してファイルを圧縮/解凍することもできることをご存知でしたか?プロセスに取り掛かりましょう– 続きを読む: Windows と Mac でファイルを圧縮す