PowerShellでクライアントコンピュータのデータをバックアップしたいと思います。これを行うには、基本的には全く問題のない要求されたデータのZIPアーカイブを作成します。しかし、Unicodeを使用する特殊文字やユーザーが非常に長いパス名を作成すると、問題が発生します。私は今、さまざまなことを試しましたが、解決策はまだ見つかりませんでした。私のクライアントコンピュータはWindows 10(Build 1511)を実行します。記念日の更新(ビルド1607)のインストールは、他の依存関係による解決策ではありません。また、ZIPファイルを作成するための第三者ソフトウェアの使用は、1つにすることはできません。PowerShellとWindowsツールを使ってZIPアーカイブを作成する
私が見つけて試した3つの方法は以下のとおりです。それらはすべて共通の問題を抱えています。長いパス名になるとすぐに実行を停止するか、残りのフォルダ構造をスキップします。
1のPowerShellコマンドレットV5の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
}
次に、\\?\C:\Test
のように見えるUNC名前空間を介してローカルドライブにアクセスすることが可能であることがわかった。しかし、これは私のWindows 10ビルド1511バージョンでは動作しません。ビルド1607では可能です。私が理解できないこと:なぜですか?私はbuild 1511に最新の.net version 4.6.2をインストールしてみましたが、まだ問題はあります。
誰でも(ローカル)UNC名前空間へのアクセスやZIPアーカイブの作成を手伝ってもらえますか? UNCパスにアクセスするための
お寄せいただきありがとうございます。前に.netクラスで試したかどうかはわかりません。 ただし、UNCパスとネットワークコンピュータ名でこれを行うと、長いパスまたはファイル名の標準的なパスが長すぎる例外が発生します。私の経験からは、ローカルのUNCパス( '\\?\ C:\ ...'など)を使用すると動作します。 PowerShell v2でローカルのUNCパスを試してみて、それがうまくいくかどうか教えてください。 – HenrikM
UNCのように書かれたローカルパスも動作するように、私はあなたが求めているものを手に入れません。 例: "\\ localhost \ c $ \ Users \ Me \ Desktop \ test" screenshot:http://imgur.com/RGNoKGC – freakydinde