测试是否执行了 zip 文件解压命令

Test if zip File extract command executed

我想测试 zip 文件的条件是否已正确提取或在 PowerShell v4 中提取命令时出现任何错误。请更正我的代码。

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

$file = 'C:\PSScripts\raw_scripts\zipfold\test.zip'
$path = 'C:\PSScripts\raw_scripts\zipfold\extract'

if ( (Test-path $file) -and (Test-path $path) -eq $True ) {
    if ((unzip $file $path)) {
        echo "done with unzip of file"
    } else {
        echo "can not unzip the file"
    }
} else {
    echo "$file or $path is not available"
}

function unzip {
    param([string]$zipfile, [string]$outpath)

    $return = [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
    return $return
}

此脚本提取一个 zip 文件,但显示 "can not unzip file." 作为输出。

不确定 $return 变量的值是什么,我的 If 条件总是失败。

documentation 证实了@Matt 的怀疑。 ExtractToDirectory() 被定义为 void 方法,所以它没有 return 任何东西。因为 $return 总是 $null,计算结果为 $false

话虽如此,如果出现问题,该方法应该抛出异常,因此您可以使用 try/catch 和 return $false 以防发生异常:

function unzip {
  param([string]$zipfile, [string]$outpath)

  try {
    [IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
    $true
  } catch {
    $false
  }
}