1

执行此代码时,我收到以下错误:

$filesExist = Test-Path($file)
if ($filesExist) {
    $shell_app=new-object -com shell.application
    $zip_file = Get-Item "$mindCrackFolder\files.zip"
    $destination = Get-Item $mindCrackFolder

    $destination.Copyhere($zip_file.items(), 0x14)
    #Remove-Item "$zip_file"
    #Remove-Item "install.ps1"
}

错误:

Method invocation failed because [System.IO.FileInfo] doesn't contain a method named 'items'.
At C:\Users\User1\Desktop\ps install\install.ps1:33 char:5
+     $destination.Copyhere($zip_file.items(), 0x14)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

但是我已经将 $destination 转换为要操作的 IO 对象了?我可以得到任何帮助,这是我第一次尝试PS。

4

3 回答 3

2

这与 $destination 无关。 $zip_file.items()首先进行评估,错误消息告诉您返回的 .NET System.IO.FileInfo 对象Get-Item没有Items()方法。 Get-Item仅返回一个提供有关文件信息的对象 - 大小、上次写入时间、只读与否等。您不能使用 Get-Item 访问 ZIP 文件的内容。

如果您需要提取 ZIP 文件的内容,请考虑使用PowerShell Community Exensions 的 Expand-Archivecmdlet。

于 2013-01-08T17:28:47.453 回答
0

错误是在谈论您items()在 = 上使用该方法的对象$zip_file。Powershell 没有内置的 zip 支持,你必须创建它(使用 shell.application com-object,谷歌它)或添加一个 .net 库。$zip_file只是一个简单的 FileInfo 对象,就像您从dir(Get-ChildItem) 获得的对象一样。它不包含items()方法。

解决方案:如前所述,谷歌powershell zip files阅读有关如何在 powershell 中使用 zip 文件的信息。我的建议是DotNetZip

于 2013-01-08T17:28:54.083 回答
0

我不知道您在哪里学到了什么,但您似乎错误地复制了一些代码并临时进行了更改。尝试以下脚本,它可以满足您的需求:

$shell_app=new-object -com shell.application
$filename = "test.zip"
$zip_file = $shell_app.namespace((Get-Location).Path + "\$filename")
$destination = $shell_app.namespace((Get-Location).Path)
$destination.Copyhere($zip_file.items(), 0x14)

itemsand方法在对象copyHere上不可用FileInfo,这是您从Get-Item. 如上所示使用它们。

于 2013-01-08T17:35:22.160 回答