Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

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スクリプトでZIPアーカイブを作成および抽出する例を見てみましょう。

PowerShell:Compress-Archiveを使用してZIPアーカイブを作成する

Compress-Archiveコマンドの構文は次のとおりです。

Compress-Archive [-Path] String[] [-DestinationPath] String  [-CompressionLevel String ] [-Update]

  • パス パラメータは、アーカイブするファイルまたはフォルダへのパスを指定するために使用されます。
  • DestinationPath –ZIPファイルへのパスを指定します。
  • 圧縮レベル –圧縮レベルを設定します(NoCompressionOptimal またはFastest );
  • 更新 –既存のZIPアーカイブにファイルを追加(更新)できます。
  • 強制 –指定した名前のアーカイブがすでに存在する場合は、上書きされます。
ヒント 。圧縮レベルのオプション:

  • 最適 —圧縮レベルによる最適化;
  • 最速 —所要時間による最適化;
  • NoCompression —圧縮なし。

NoCompressionオプションは、すでに圧縮されているファイル(jpg、msi、mp3など)を単一のZIPファイルにアーカイブする場合に使用する必要があります。この場合、Windowsはそれらを圧縮するためにCPU時間を浪費しません。

単一のファイルを圧縮するには、次のコマンドを実行します:

Compress-Archive -Path "C:\Logs\WindowsUpdate.log" -DestinationPath C:\Archive\updatelog.zip -CompressionLevel Optimal

PowerShellを使用してZIPアーカイブを作成してファイルを解凍するにはどうすればよいですか?

複数のフォルダー(すべてのファイルとネストされたフォルダーを含む)のコンテンツ全体を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

ヒント .Microsoft.PowerShell.ArchiveモジュールはSystem.IO.Compression.ZipArchiveクラスを使用するため、2 GBを超えるファイルを圧縮することはできません(基盤となるAPIに制限があるため)。より大きなファイルを圧縮しようとすると、エラーが表示されます:

PowerShellを使用して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

PowerShellを使用してZIPアーカイブを作成してファイルを解凍するにはどうすればよいですか?

Microsoft.PowerShell.Archiveモジュールのデメリット:

  • アーカイブを抽出せずにアーカイブの内容を表示することはできません。
  • アーカイブから一部のファイルを抽出できません(アーカイブファイル全体を抽出する必要があります)。
  • zip以外のアーカイブ形式は使用できません。
  • パスワードでZIPアーカイブを保護することはできません。
より複雑なケースでは、PowerShellスクリプトでアーカイブを実行するためにサードパーティのツールを使用する必要があります。たとえば、 7zip または7Zip4Powershell モジュール。

次のように、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)

PowerShellを使用してZIPアーカイブを作成してファイルを解凍するにはどうすればよいですか?

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

PowerShellを使用してZIPアーカイブを作成してファイルを解凍するにはどうすればよいですか?

または、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()

PowerShellを使用してZIPアーカイブを作成してファイルを解凍するにはどうすればよいですか?

ZIPファイルをC:\ Logsフォルダーに抽出するには、次のコマンドを使用します。

$SourceZipFile = 'C:\PS\logs.zip'
$TargetFolder = 'C:\Logs'
[IO.Compression.ZipFile]::ExtractToDirectory($SourceZipFile, $TargetFolder)


  1. Mac でファイルを解凍して抽出する方法

    ZIP は、ユーザーが高度な圧縮技術を使用して 1 つのフォルダーで複数のファイルを簡単に送信または共有できるようにする、一般的なアーカイブ ファイル形式です。そのため、メールを送信したりデータを共有したりする際に大量の添付ファイルを添付するのではなく、代わりに ZIP ファイルを使用するだけで作業を完了することができます。 ZIP ファイルには通常、圧縮されたファイルとデータのバッチが含まれているため、大きなサイズのファイルを一度に比較的高速で送信することもできます。 では、電子メールで ZIP ファイルを受け取った場合、または Web サイトからソフトウェアをダウンロードしているとき

  2. Windows 10 で Powershell を使用してファイルを圧縮/解凍する方法

    ジップ機能 を使用すると、関連するすべての構成を 1 つのファイルに圧縮して、ファイルをより小さいサイズに圧縮できます。このようにして、このような圧縮された Zip ファイルは、電子メールやその他のファイル共有メディアを介して他のユーザーと簡単に共有できます。 Zip 機能を実行するには、ユーザーは通常、WinRAR や 7-zip などの RAR ソフトウェアを使用します。しかし、組み込みの Windows Powershell を使用してファイルを圧縮/解凍することもできることをご存知でしたか?プロセスに取り掛かりましょう– 続きを読む: Windows と Mac でファイルを圧縮す