Пожалуйста, ознакомьтесь с документацией.Метод OpenRead()
возвращает объект ZipArchive
, свойство которого Entries
содержит коллекцию объектов ZipArchiveEntry
.Эти объекты имеют (среди прочего) свойство FullName
с относительным путем к элементу внутри архива, поэтому вы должны иметь возможность выбрать файл, который хотите обработать, следующим образом:
$temp = 'Content/1/a/5/t/ZIPNAME/a/b/c/temp/'
$zip = [IO.Compression.ZipFile]::OpenRead($zipPath)
$entries = $zip.Entries | Where-Object { $_.FullName.StartsWith($temp) -and $_.Name }
дополнительное предложение -and $_.Name
исключает записи каталога (которые имеют пустое свойство Name
) из результата.
В документации также указан метод ExtractToFile()
, который предположительно позволяет извлекать записи в файлы.Тем не менее, этот метод не был доступен на моей тестовой коробке.Не уверен, доступен ли он просто в PowerShell или он был добавлен в более новую версию .Net framework.
Вы можете извлечь файлы старомодным способом, хотя:
$entries | ForEach-Object {
$dstPath = Join-Path 'C:\destination\folder' $_.Name
$src = $_.Open()
$dst = New-Object IO.FileStream $dstPath, 'Create', 'Write', 'Read'
$src.CopyTo($dst)
$src.Close(); $src.Dispose()
$dst.Close(); $dst.Dispose()
}