shell 命名空间上的 Powershell ParentContainsErrorRecordException

Powershell ParentContainsErrorRecordException on shell namespace

我正在尝试编写一个解压 powershell 脚本,但我 运行遇到了 $shell.NameSpace() 函数的问题。

function unzip ($sourceFile, $destination){
    $shell = new-object -com shell.application
    $zip = $shell.NameSpace($sourceFile)
    foreach($item in $zip.items()){
        $shell.Namespace($destination).copyhere($item) #Error here
    }
}

unzip "$PWD\folder.zip" $PWD

当我 运行 这样做时,我在第二次 $shell.NameSpace() 调用时遇到错误。

You cannot call a method on a null-valued expression.
At C:\scriptDir\unzipScript.ps1:9 char:6
+         $shell.NameSpace($destination).copyhere($item)
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : InvokeMethodOnNull

我不明白为什么 second 调用失败了。很明显 PWD 是存在的,并且是一个基于第一个参数的目录。

Shell.NameSpace 接受一个字符串。 $PWD 是一个 PathInfo 对象。您可以改用 $pwd.Path。

unzip "$PWD\folder.zip" $PWD.Path

作为替代方案,您可以使用 .Net System.IO.Compression.ZipFile class。 Here is a sample.