You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用[IO.Compression.ZipFile]和Expand-Archive解压单文件Zip报错

问题诊断与解决思路
  • 排查压缩格式兼容性:Windows右键创建的Zip包,单文件场景可能触发了.NET原生方法不支持的压缩算法(比如部分情况下的LZMA2变种)。可以用7-Zip命令行查看压缩格式细节:

    "C:\Program Files\7-Zip\7z.exe" l $downloadFilePath
    

    查看输出中的Method字段,确认是否为Deflate以外的算法。

  • 改用兼容性更强的解压工具:放弃PowerShell原生方法,用7-Zip命令行替代,几乎能处理所有Windows生成的Zip包:

    $7zipExe = "C:\Program Files\7-Zip\7z.exe"
    & $7zipExe x $downloadFilePath -o$deploymentPath -y
    

    -y参数用于自动确认覆盖目标文件,按需调整。

  • 验证Zip包完整性:即使手动解压正常,下载过程中仍可能出现隐性损坏。对比本地包与源文件的哈希值:

    (Get-FileHash $downloadFilePath -Algorithm SHA256).Hash
    

    若哈希值不一致,重新下载即可解决。

  • 细粒度处理单文件Zip:如果必须使用.NET方法,尝试逐条目解压,避免批量解压的整体报错:

    $zipArchive = [IO.Compression.ZipFile]::OpenRead($downloadFilePath)
    foreach ($entry in $zipArchive.Entries) {
        $targetPath = Join-Path $deploymentPath $entry.FullName
        if (-not $entry.Name) {
            New-Item -Path $targetPath -ItemType Directory -Force | Out-Null
        } else {
            New-Item -Path (Split-Path $targetPath) -ItemType Directory -Force | Out-Null
            $entry.ExtractToFile($targetPath, $true)
        }
    }
    $zipArchive.Dispose()
    
  • 升级PowerShell版本:旧版PowerShell(如5.1)依赖的.NET Framework对新压缩算法支持有限,升级到PowerShell 7.x(基于.NET Core)可提升Zip格式兼容性。

内容的提问来源于stack exchange,提问作者Gordon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:45:41