用PowerShell和Windows工具创建一个ZIP文件

本文关键字:一个 ZIP 文件 PowerShell Windows 工具 创建 | 更新日期: 2023-09-27 18:14:58

我想用PowerShell备份客户电脑的数据。为此,我创建了所请求数据的ZIP存档,这基本上没有任何问题。但是当涉及到使用Unicode的特殊字符或用户构建非常长的路径名时,我就会遇到麻烦。我已经尝试了不同的东西,但还没有找到一个解决方案。我的客户端计算机运行Windows 10 (Build 1511)。由于其他依赖关系,安装周年更新(Build 1607)不是解决方案。也不能使用第三方软件来创建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档案?

用PowerShell和Windows工具创建一个ZIP文件

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

喜欢' ' computername ' '路径'路径' file.txt加元

我使用。net函数,因为与powershell v2兼容

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

我使用长UNC路径没有问题