powershell中的Expand-Archive无法提取嵌套的文件夹和文件

disbfnqx  于 2022-12-18  发布在  Shell
关注(0)|答案(8)|浏览(503)

我使用以下简单的powershell将zip文件夹(包含其他文件夹和日志文件)解压缩到目标位置

$FolderPath = "C:\Temp\Whatever"

Expand-Archive -Path "$FolderPath\logs.zip" -DestinationPath "$FolderPath\logs"

不幸的是,这会返回一大堆错误,如下所示....

Remove-Item : Cannot find path 'C:\Temp\Whatever\logs\1_Selenium SEPA-Test\Attempt1\1_Start VM's\Release\1_Initialize Agent.log' because it does not exist.
At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:410 char:46
+ ...                 $expandedItems | % { Remove-Item $_ -Force -Recurse }
+                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Temp\Whateve...alize Agent.log:String) [Remove-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

Remove-Item : Cannot find path 'C:\Temp\Whatever\logs\1_Selenium SEPA-Test\Attempt1\1_Start VM's\Release\1_Initialize Job.log' because it does not exist.
At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:410 char:46
+ ...                 $expandedItems | % { Remove-Item $_ -Force -Recurse }
+                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Temp\Whateve...tialize Job.log:String) [Remove-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

以及其他类似的错误
我可以确认第一个错误C:\Temp\Whatever\logs\1_Selenium SEPA-Test\Attempt1\1_Start VM's\Release\1_Initialize Agent.log中引用的文件确实存在于zip文件夹中的等效位置...

脚本结束后,我在指定的目录中看到一个不完整的文件夹。

这是怎么回事?
谢谢你,

i86rm4rw

i86rm4rw1#

这是怎么回事?
Expand-Archive在尝试展开一些文件时失败(在我的例子中,这是由于路径太长),并尝试删除它认为它提取的文件(请参见https://github.com/PowerShell/Microsoft.PowerShell.Archive/blob/master/Microsoft.PowerShell.Archive/Microsoft.PowerShell.Archive.psm1#L418),但Remove-Item找不到任何文件,因为它们实际上没有被提取。
切换到PowerShell 7为我修复了长路径问题。

igetnqfo

igetnqfo2#

我以前在使用此模块时遇到过一些问题,我和一位同事拼凑了以下内容

# This script was created to extract the contents of multiple ZIP files located in a directory
# structure. Each ZIP files is extracted within the folder it resides.

# File path
$filepath = Get-ChildItem -Path 'C:\Users\Luke\Desktop\ArchivedScripts\' -Filter *.zip -Recurse

# convert filepath to NameSpace object
$shell = new-object -com shell.application

# ForEach Loop processes each ZIP file located within the $filepath variable
foreach($file in $filepath)
{
    $zip = $shell.NameSpace($file.FullName)
    foreach($item in $zip.items())
    {
        $shell.Namespace($file.DirectoryName).copyhere($item)
    }
    Remove-Item $file.FullName
}

也许这是有用的?

68bkxrlz

68bkxrlz3#

在命令中增加兵力对我很有效.

w8ntj3qf

w8ntj3qf4#

我有同样的问题。这个问题发生在要导出的文件路径太长的情况下。

pxy2qtax

pxy2qtax5#

我得到了同样的错误,它为我工作时,我删除了双引号的ZIP文件路径。
例如:

$FolderPath = "C:\Temp\Whatever"

展开存档路径$文件夹路径\logs.zip -目标路径“$文件夹路径\logs”

rsl1atfo

rsl1atfo6#

我没有长路径的问题-这是别的东西-不确定是什么。我运行的是Windows Server 2019,默认的PowerShell是V5. 1(你可以用X1 M0 N1 X检查)。
我安装了v7.1和v5.1。然后我可以用powershell命令运行powershell v5,用pwsh命令运行v7.1。Expand-Archive现在工作起来没有任何问题。

noj0wjuj

noj0wjuj7#

这是我可以让Expand-Archive在2016 Server(PS 5.1)中工作的唯一方法,当我试图在本地运行完全相同的命令时,它完全失败了...

#copy_and_expandarchive.ps1
$ServerList = gc D:\batch\input\servers.txt
Foreach ($server in $ServerList){
if(Test-Connection $server -count 1 -quiet){
    if($server -like '#*')
    {
        continue
    }
    Invoke-Command $server -ScriptBlock {
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    Expand-Archive -force -verbose –LiteralPath 'D:\install\logstash-7-17-3GIS-Prod.zip' –Destination 'd:\apps'
    }}}

为什么会这样?因为在此映像中,命令解释程序默认为PowerShell的x86版本(64位PS:C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe仅在组策略成功后才应用-我必须禁用IPv6才能完成此操作,然后使用sap运行gpupdate /target:computer-等待以确保它工作)

uyto3xhc

uyto3xhc8#

我在另一种情况下也遇到了同样的错误。
我正在尝试从另一台计算机解压缩a differently encoded Zip file
解决方案1:保持相同的编码对我很有效。
设置:设置--〉语言和区域--〉Region--〉当前系统区域设置。
注意:不要勾选🔲Bata: Use Unicode UTF-8 for worldwide language support.
解决方案2:使用其他工具,如Powershell77z.exe

相关问题