【发布时间】: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