PowerShell,不包含方法'items'

时间:2013-01-08 16:39:13

标签: windows string file powershell io

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

$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来获得任何帮助。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

解决方案:如前所述,google powershell zip files了解如何在PowerShell中使用zip文件。我的建议是DotNetZip

答案 2 :(得分: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)

itemscopyHere方法在FileInfo个对象上不可用,这是您从Get-Item获得的。如上所示使用它们。