使用[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
相关产品推荐
相关产品推荐

