2017-01-11 42 views
2

私たちは、あなたが非常にWindows 10PowershellTest-Pathを使用した場合のWindows Server 2012 R2を持つサーバーでは、Windows 10Windows Server 2012 R2の長いファイルパスが機能しません。

と比較する場合は特に、32K MAX_PATH能力のためにREFを使用したが、期待通りに働いていないインストールされています

Test-Path -Path "\\?\UNC\hostname\share\very\long\path" -PathType Container 

それはtrueを返しますが、あなたはWindows Server 2012 R2で同じコマンドを発行する場合にはFalseを返します。以下のパターンを使用して長いUNC。どちらのシステムもPowershellの最新バージョンを使用しており、両方のシステムでロングパスがレジストリで有効になっています。

これはWindows 10では動作しますが、Windows Server 2012 R2では動作しない理由は何ですか?

+0

APIが表示されるまでに長いパスの

サポートは、PowerShellの/過去ログに追加されなかった(更新プログラムのいずれかを。) – TravisEz13

+0

travisez13 @ Win32ファイル管理API(つまりCreateFileW)のユニコードバージョンであれば、ReFSとWindows Server 2012 R2ですでに動作していると言うMicrosoftの記事は、ReFSショップをサポートしています。なぜ2012 R2では動作しませんか? 2012 R2でpowershellの代わりにAPI呼び出しを指示しますか? – vane

+0

ダイレクトコールが機能するはずです。たとえば、PowerShellからの呼び出しをP/Invokeできるようにする必要があります。私は、P/Invoke呼び出しをラップするモジュールで答えを追加しました。 – TravisEz13

答えて

2

pre-Windows 10周年更新マシンにPSAlphaFSを使用する回避策があります。 Windowsの10.あなたはPowerShellのニーズがWindows 10で追加されました長いパスをサポートするためにhere Long Path support was added to PowerShell in Windows 10 Anniversary Update

+0

これは私の質問に答えています。私はwin32 APIが動作すると思っていましたが、これを使用していました。なぜそれが動作していなかったのか知りたかったのですが、あなたの答えは.netが\\?\ passthroughをunicode win32 API 4.6.2と私の最後の問題のシステムは、おそらく低いバージョンを使用しているとPowershellも同様にその低いバージョンを使用しています。 – vane

+0

私の答えを受け入れてくれてありがとう。それは私が持っているよりも少し詳細です。それはすべて正しいと思う。私はそれらの細部に自信がありませんが、私の答えを編集して情報を追加してください。さらに、正しいバージョンの.NETには、対応するバージョンのPowerShellが必要であることがわかっています。私はそれがPowerShellの5.0バージョンだと信じています。 – TravisEz13

+1

はい、これは.NETの@vaneの制限でした。この質問で提案するNTネイティブパスエスケープは、任意のバージョンのNTで動作しますが、Win32関数を直接呼び出す場合にのみ有効です。 NTラッパーは.NET 4.6.2までサポートしていませんでした。古いバージョンをサポートする必要がある場合は、PowerShellからP/Invokeに行うことができる魔法があるはずです。こうすれば、Win32 APIを直接呼び出すことができます。そして、あなたはビジネスに参加します。 –

関連する問題