使用PowerShell和Windows工具创建ZIP存档

时间:2016-10-26 14:56:55

标签: c# .net windows powershell zip

我想用PowerShell备份客户端计算机的数据。为此,我创建了一个所需数据的ZIP存档,基本上没有任何问题。但是当谈到使用Unicode的特殊字符或用户构建非常长的路径名时,我遇到了麻烦。我现在尝试了不同的东西,但还没有找到解决方案。我的客户端计算机运行Windows 10(Build 1511)。由于其他依赖性,安装周年纪念更新(Build 1607)不是解决方案。使用第三方软件创建ZIP文件也不能是一个。

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

1。使用PowerShell V5 CmdLet扩展 - 存档

创建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档案吗?

1 个答案:

答案 0 :(得分:1)

访问UNC路径,使用$ characters设计驱动器

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

类似

由于与powershell v2的兼容性,我使用.Net功能

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

我用很长的UNC路径使用它没有问题。