通过Powershell从zip中提取某个文件似乎不会查看子文件夹

Wil*_*lem 4 powershell zip

我是Powershell的新手,尤其是Powershell和ZIP文件.我想从传递的zip文件中解压缩一个特定的文件.为此,我有以下代码.下面的代码应该*.update从zip 获得.

我遇到的问题是特定文件在另一个文件夹中.运行脚本时,它似乎不会在zip文件夹中查找更多文件.

我已经在$ item上尝试了GetFolder,并且/或者通过$ item尝试了foreach.到目前为止没有成功.任何人都有想法或指导的方向?

function ExtractFromZip ($File, $Destination) {
    $ShellApp = new-object -com shell.application
    $zipFile = $ShellApp.NameSpace($File)
    foreach($item in $zipFile.Items())
    {
        Write-Host $item.Name

        if ($item.GetFolder -ne $Null) {
            Write-Host "test"
        }

        if ($item.Name -like "*.update") {
            $ShellApp.Namespace($Destination).copyhere($item)
            break;    
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ari*_*iac 16

以下是如何在较新版本的Powershell中本地执行此操作:

Add-Type -Assembly System.IO.Compression.FileSystem
$zip = [IO.Compression.ZipFile]::OpenRead($sourceFile)
$zip.Entries | where {$_.Name -like '*.update'} | foreach {[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, "C:\temp\test", $true)}
$zip.Dispose()
Run Code Online (Sandbox Code Playgroud)

  • 今天我正在看这个解决我自己的问题,我有一个绊脚石,我想为未来的读者清理:提取函数应该读作`ExtractToFile(zipArchive,destinationFileName,allowOverwriteYN)`.有关更多信息,请参阅[MSDN](https://msdn.microsoft.com/en-us/library/hh485718(v = vs.110).aspx) (5认同)
  • 请注意,“ExtractToFile()”接受文件名作为目标。要提取多个文件,需要为每个文件组成目标文件:`$zip.Entries | 地点对象名称 - 如 *.txt | ForEach-Object{[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, "$extractPath\$($_.Name)", $true)}` (来源:https://theposhwolf.com/howtos /PowerShell 和 Zip 文件/) (2认同)