【问题标题】:Create a ZIP archive with PowerShell and Windows tools使用 PowerShell 和 Windows 工具创建 ZIP 存档
【发布时间】:2016-10-26 14:56:55
【问题描述】:

我想使用 PowerShell 备份客户端计算机的数据。为此,我创建了所请求数据的 ZIP 存档,这基本上没有问题。但是当涉及到使用 Unicode 的特殊字符或用户构建非常长的路径名时,我遇到了麻烦。我现在尝试了不同的方法,但还没有找到解决方案。我的客户端计算机运行 Windows 10(内部版本 1511)。由于其他依赖关系,安装周年更新(Build 1607)不是解决方案。也不能使用 3rd 方软件来创建 ZIP 文件。

以下是我已经找到并尝试过的三种方法。它们都有相同的问题:当涉及到长路径名时,它们会立即停止执行,或者只是跳过文件夹结构的其余部分。

1.使用 PowerShell V5 CmdLet Expand-Archive 创建一个 ZIP 文件

$Target = "C:\Temp\Test.zip"
$Source = "C:\Test"
Compress-Archive -Path $Source -DestinationPath $Target

2。使用 .net 类创建 ZIP 文件

Add-Type -assembly "system.io.compression.filesystem"
$Target = "C:\Temp\Test.zip"
$Source = "C:\Test"
[io.compression.zipfile]::CreateFromDirectory($Source, $Target); 

3.使用 Windows 资源管理器(压缩文件夹)创建 ZIP 文件

$Source = Get-ChildItem "C:\Test" -Recurse
$Target = "C:\Temp\Test.zip"

if (-not (Test-Path $Target)) {
 Set-Content $Target ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
 (dir $Target).IsReadOnly = $false  
}
$objShell = New-Object -Com Shell.Application
$objZIP = $objShell.NameSpace($Target)

foreach($File in $Source) { 
 $objZIP.CopyHere($File.FullName)
 Start-sleep -milliseconds 500
} 

然后我发现,应该可以通过 UNC 命名空间访问本地驱动器,看起来像 \\?\C:\Test。但这不适用于我的 Windows 10 build 1511 版本。使用 build 1607 是可能的。我不明白的是:为什么?我尝试在 build 1511 上安装最新的 .net 版本 4.6.2,但问题仍然存在。

谁能帮助我访问(本地)UNC 命名空间或创建 ZIP 存档?

【问题讨论】:

    标签: c# .net windows powershell zip


    【解决方案1】:

    访问UNC路径,使用$字符设计驱动

    如 \\computername\c$\path\path\file.txt

    我使用 .Net 功能是因为与 powershell v2 兼容

    [IO.Compression.ZipFile]::CreateFromDirectory($SourcesFolder, $zipTempPath, $CompressionLevel, $False)
    

    我将它与长 UNC 路径一起使用没有问题。

    【讨论】:

    • 感谢您的建议。不确定我之前是否尝试过使用 .net 类。但是,当我使用 UNC 路径和网络计算机名称执行此操作时,我会得到典型的路径太长异常,路径或文件名长。根据我的经验,当您使用本地 UNC 路径(如 '\\?\C:\...')时,它才有效。您能否尝试 PowerShell v2 中的本地 UNC 路径并告诉我这是否适合您?
    • 我不明白你在寻找什么,顺便说一下,像 UNC 一样编写的本地路径也可以工作。示例:“\\localhost\c$\Users\Me\Desktop\test”截图:imgur.com/RGNoKGC
    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多