Inhalt eines ZIP-Archives mit PowerShell auflisten, ohne es zu entpacken

Der Dotnet-Doktor Holger Schwichtenberg  –  0 Kommentare

Für das Auflisten des Inhalts von ZIP-Archiven existiert Commandlet, aber man kann die .NET-Klasse System.IO.Compression.ZipFile in der PowerShell nutzen.

Die PowerShell besitzt zwar seit Version 5.0 ein eingebautes Commandlet, um ein ZIP-Archiv zu entpacken (Expand-Archive), aber wenn man nur die Liste der Dateien im Archiv sehen will ohne das Archiv dabei zu entpacken, gibt es dort keine Option.

Zum Glück ist die PowerShell sehr mächtig und auch in der Lage, .NET-Klassen direkt anzusteuern. Daher kann man die .NET-Klasse System.IO.Compression.ZipFile aus der Assembly System.IO.Compression.FileSystem.dll verwenden und das dortige Property "Entries" abzufragen, um eine Liste der Dateien im ZIP-Archiv mit ihrer Größe zu erhalten.

$path = "t:\"
Write-host "Inhalte aller ZIP-Archive in $path auflisten"`
-ForegroundColor Yellow
[Reflection.Assembly]::LoadWithPartialName`
('System.IO.Compression.FileSystem') | Out-Null

foreach($sourceFile in (Get-ChildItem $path -filter '*.zip'))
{
Write-host "--- FILE: $($sourceFile.FullName)"
$zip = [IO.Compression.ZipFile]::OpenRead($sourceFile.FullName)
$zip.Entries | Format-Table Fullname, Length
$zip.Dispose()
}