システムエンジニアXの「プログラミング以外」の話 50代会社員SEのお仕事・副業・システム運用の経験談

PowerShellだけで2GB以上の大きなサイズのZIPファイルを作成する方法

公開:
更新:

※本記事には広告を含みます。

PowerShellのCompress-ArchiveコマンドZIP圧縮をするときにサイズが大きいファイルを圧縮しようとしたときにエラーになったことがありませんか?
Compress-Archiveコマンドには制約があります。
本記事では、Compress-Archiveの限界を解説しつつ、PowerShell v5だけで大容量ZIPを扱うための実用的な手法を紹介します。


PowerShellだけで大容量ZIPは作れるのか?

PowerShellの「Compress-Archive」は便利なコマンドレットですが、2GBを超えるZIPファイルの作成時には、予期しないエラーが発生することがあります。

よくあるエラー例

"3" 個の引数を指定して "Write" を呼び出し中に例外が発生しました: "ストリームが長すぎます。"

このようなエラーが出る理由は、Compress-Archiveの内部的な制約にあります。

Compress-Archiveの制約とは?

  • ファイルサイズが約2GBを超えるとエラーになる
  • ZIP64に対応していない
  • 大容量ファイルや大量ファイルでは失敗しやすい

そのため、Compress-Archiveは「中~大容量ファイル」の圧縮には不向きです。

代替策:.NETのZipFileクラスを使う方法

PowerShell v5では、.NET FrameworkのZipFileクラスを使うことで、外部ツールなしでZIP64対応の圧縮が可能です。

サンプルスクリプト


$sourceDir = "C:\Data\LargeFolder"
$zipFile   = "C:\Backup\LargeArchive.zip"

Add-Type -AssemblyName System.IO.Compression.FileSystem

[IO.Compression.ZipFile]::CreateFromDirectory(
    $sourceDir,
    $zipFile,
    [IO.Compression.CompressionLevel]::Optimal,
    $false
)

Write-Host "圧縮完了:$zipFile"

この方法では、2GBを超えるZIPファイルも正常に作成できる可能性が高いです。

実験:計4.5GBのZIPを作成してみた

1GB~2GBのダミーファイル×3(動画ファイル、計4.5GB)をフォルダに用意して、上記スクリプトでZIP化。問題なく圧縮・展開できました!


このダミーファイルたちはCompress-Archiveコマンドで圧縮を実行しようとすると
「”3″ 個の引数を指定して “Write” を呼び出し中に例外が発生しました: “ストリームが長すぎます。”」
エラーが出てしまったものです。

ポイント:ZipFileはZIP64に暗黙対応しているため、オプション指定は不要です。

注意点とベストプラクティス

  • 4GBを超えるファイルを含む場合は事前検証が必要
  • 圧縮中はファイルを他のアプリが使用していないことを確認
  • 作成したZIPが古い解凍ツールで開けない場合がある

解凍スクリプト(展開)


$zipFile = "C:\Backup\LargeArchive.zip"
$extractPath = "C:\Restore"

[IO.Compression.ZipFile]::ExtractToDirectory($zipFile, $extractPath)

Compress-Archiveとの使い分け

用途推奨方法
小容量ファイルの圧縮Compress-Archive
2GB超のフォルダ圧縮ZipFile.CreateFromDirectory
巨大ファイル・分割圧縮7-Zipなど外部ツール

まとめ

PowerShell v5だけでも、.NETのZipFileクラスを使えば、2GB以上のZIPファイルを作成できます。
Compress-Archiveがエラーを出すような大容量ケースでは、代替手段として非常に有効です。

実用的な自動化やバックアップの一部として、ぜひこの方法を活用してください。

免責規定

この記事で提供される情報は、一般的なガイダンスを目的としており、すべての環境やシステムでの動作を保証するものではありません。

OSのバージョンやリリースによっては、記載されている事が実行できない、または異なる結果をもたらす可能性があります。 また、会社所有のパソコン、スマホ、タブレットなどでは、ポリシーや権限によって実行できない場合があります。

この記事の情報を使用することによって生じる問題や結果について、筆者およびサイト管理者は責任を負いません。 すべての操作は自己責任で行ってください。

最後までお読みいただきありがとうございました。
またお会いしましょう!

著者のおすすめ教材 & note実践記事

公式教材 豪華4大特典付き

PowerShell実務スクリプト50選

AD・Windows運用・障害対応をコマンド一発で自動化する現役SEの実務スクリプト集。

最新note 毎日定時で帰る現場ハック

ググっても出ない実務テク20選

社内SE現場の地味で細かすぎる面倒作業を一撃で解消する実践テクニック集。