我想用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档案吗?
答案 0 :(得分:1)
访问UNC路径,使用$ characters设计驱动器
与\\ computername \ c $ \ path \ path \ file.txt
类似由于与powershell v2的兼容性,我使用.Net功能
[IO.Compression.ZipFile]::CreateFromDirectory($SourcesFolder, $zipTempPath, $CompressionLevel, $False)
我用很长的UNC路径使用它没有问题。