ZIPを解凍せず中身を確認する ― PowerShellから.NETのZipFileを直接使う

PowerShellカテゴリを表すパンダのイラスト PowerShell

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。.NETのZipFile.OpenReadとZipArchiveEntryの公式APIを確認し、ZIPを展開せず内容を確認するPowerShell TIPSとして整理しています。

検証ステータス:📘 .NET公式API確認済み・サンプル実装済み・PowerShell実機確認は未実施

ZIPを解凍せず中身を確認する ― PowerShellから.NETのZipFileを直接使う

ZIPの内容を確認したいだけなら、毎回展開する必要はありません。PowerShellから .NET の System.IO.Compression.ZipFile.OpenRead() を使うと、ZIPを読み取り用に開き、各entryの名前やサイズを一覧できます。

最小例

$path = (Resolve-Path -LiteralPath ".\sample.zip").Path

# ZIPを読み取り専用として開きます。ここでは展開しません。

$archive = [System.IO.Compression.ZipFile]::OpenRead($path)

try {
    $archive.Entries | Select-Object FullName, Length, CompressedLength
}
finally {

    # ファイルを掴んだままにしないよう、必ず閉じます。

    $archive.Dispose()
}

Entries はZIP内部のentry一覧です。各entryから、元のサイズを表す Length、圧縮後サイズを表す CompressedLength などを取得できます。

「解凍しない」とは何をしているのか

flowchart LR
    A[ZIPファイル] --> B[ZipFile.OpenRead]
    B --> C[ZipArchive]
    C --> D[Entries]
    D --> E[ファイル名]
    D --> F[元サイズ Length]
    D --> G[圧縮サイズ CompressedLength]

この処理はentryの一覧やメタデータを読むもので、各ファイルを保存先へ展開する処理ではありません。そのため、「どんなファイルが入っているか」「想定外に巨大なentryがないか」を展開前に見る用途に向きます。

ただし、ZIPを読むだけで未知のファイルが安全になるわけではありません。 信頼できないアーカイブを後で展開・実行する場合は、パスやファイル内容など別の安全確認が必要です。

完全版では集計も出す

GitHub版ではentryごとに次を表示します。

  • Name: ZIP内部のパス

  • Size: 元サイズ

  • CompressedSize: 圧縮後サイズ

  • LastWriteTime: entryに記録された更新日時

  • IsDirectory: ディレクトリentryか

さらにファイル数、元サイズ合計、圧縮サイズ合計も出します。

この方法なら、たとえば「ZIPを受け取ったが、中身を展開する前に容量とファイル構成だけ見たい」という確認作業を短くできます。

Disposeを省かない

OpenRead() で開いた ZipArchive はファイルを保持します。後始末をしないまま別処理でZIPを移動・上書きしようとすると、環境によってはファイル使用中の原因になります。

そのため、エラーが途中で起きても finally で Dispose() する形にしています。短いスクリプトでも、外部リソースを開いたら閉じるところまでを1セットにします。

GitHubサンプル

公式情報・一次情報

文書情報

記事タイトル
ZIPを解凍せず中身を確認する ― PowerShellから.NETのZipFileを直接使う
作成日
更新日
Source URL
https://papanda925.com/?p=15304

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました