Powershell [System.IO.Compression.ZipArchiveEntry] не содержит метод с именем «ExtractToFile» - PullRequest
0 голосов
/ 09 июня 2018

У меня есть сценарий powershell, где я хотел бы извлечь конкретные записи.Кажется, я не могу понять, как обойти ошибку, когда он не может найти методы расширения для объекта .NET ZipArchiveEntry.

Мой скрипт ниже запустится и "выпишет" файлы изzip, но когда он попадает в строку $ entry.ExtractToFile ($ dst) , он выдает следующую ошибку:

Ошибка вызова метода, поскольку [System.IO.Compression.ZipArchiveEntry] не содержит метод с именем «ExtractToFile».

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

$filesToExtract = @(
    "appsettings.json";
    "Content\cms\index.xml";
)
$archive = "C:\Users\User1\Desktop\archive.zip"
$dstRoot = "C:\Users\User1\Desktop\test"
$zip = [IO.Compression.ZipFile]::OpenRead($archive)
foreach($entry in $zip.Entries){
    if ($filesToExtract -contains $entry.FullName){
        $dst = [io.path]::combine($dstRoot, $entry.FullName)
        %{ "Extract ==> " + $dst }        

        $entry.ExtractToFile($dst)

    }
}
$zip.Dispose()

1 Ответ

0 голосов
/ 09 июня 2018

Попробуйте использовать [System.IO.Compression.ZipFileExtensions].Сбой, если файл извлечения уже существует.

[cmdletbinding()]
Param()

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

$filesToExtract = @(
    "t.txt";
)
$archive = "$PSScriptRoot\t.zip"
$dstRoot = "$PSScriptRoot"
$zip = [System.IO.Compression.ZipFile]::OpenRead($archive)

foreach($entry in $zip.Entries){
    if ($filesToExtract -contains $entry.FullName){
        $dst = [io.path]::combine($dstRoot, $entry.FullName)

        if (Test-Path -Path $dst) { Remove-Item -Path $dst }

        Write-Verbose $("Extract ==> {0}" -f @($dst))
        [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $dst)
    }
}
$zip.Dispose()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...