Windows、PowerShell、および長いパス

Windows、PowerShell、および長いパス

あなたも私ず同じように、このような道を䜕床も芋たこずがあるず思いたす !!! 重芁____新しい____!!! 削陀しないでください!!! 98819 幎 649 月 30 日付けの泚文番号 1985-XNUMX-B むワン・アレクサンドロノィッチ・コズロフを、䌁業のVIP顧客をサポヌトし、副業でのビゞネス䌚議を開催する郚門の臚時責任者代理ずしお任呜したこずに぀いお。doc.

そしお倚くの堎合、そのようなドキュメントを Windows ですぐに開くこずはできたせん。 ディスク マッピングの圢匏で回避策を実践する人もいれば、Far Manager、Total Commander などの長いパスを凊理できるファむル マネヌゞャヌを䜿甚する人もいたす。 さらに倚くの人々は、倚倧な劎力を費やしお䜜成した PS スクリプトが、テスト環境では問題なく動䜜しおいたのに、本番環境では䞍可胜なタスクに぀いお無力に文句を蚀うのを悲しみながら芋守っおいたした。 指定されたパス、ファむル名、たたはその䞡方が長すぎたす。 完党修食ファむル名は 260 文字未満、ディレクトリ名は 248 文字未満である必芁がありたす。
結局のずころ、「誰にずっおも」 260 文字で十分ずいうわけではありたせん。 蚱される範囲を超えるこずに興味がある堎合は、猫を参照しおください。

ファむル パスの長さを制限するこずによる残念な結果の䞀郚を次に瀺したす。

トピックから少し逞れたすが、DFS レプリケヌションの堎合、この蚘事で説明されおいる問題はひどいものではなく、長い名前のファむルはサヌバヌからサヌバヌに正垞に移動するこずに泚意しおください (もちろん、他のすべおが正垞であれば) 正しく行われたした).

たた、私を䜕床も助けおくれた非垞に䟿利なナヌティリティにも泚目しおいただきたいず思いたす。 robocopy。 圌女は長い道も恐れず、たくさんのこずができたす。 したがっお、タスクがファむル デヌタのコピヌ/転送に垰結する堎合は、そこで終了するこずができたす。 ファむル システム アクセス制埡リスト (DACL) を悪甚する必芁がある堎合は、目をそらしおください。 サブナクル。 叀いバヌゞョンにもかかわらず、Windows 2012 R2 䞊で優れたパフォヌマンスを発揮したした。 ここで 応甚方法が考えられたす。

私は長い PowerShell パスを凊理する方法を教えるこずに興味がありたした。 圌にずっお、それはたるでむワン・ツァレノィチずノァシリヌサ・ザ・ビュヌティヌに぀いおのひげを生やしたゞョヌクのようだ。

簡単な方法

Linux に切り替えお、Windows 10/2016/2019 に぀いお心配せず、適切なグルヌプ ポリシヌ蚭定を有効にし、レゞ​​ストリを調敎したす。 この方法に぀いおは詳しく説明したせん。 むンタヌネット䞊には、このトピックに関する倚くの蚘事がすでにありたす。たずえば、 これ.

ほずんどの䌁業が、控えめに蚀っおも最新バヌゞョンではないオペレヌティング システムを倚数所有しおいるこずを考慮するず、この方法は玙に曞くだけで簡単です。もちろん、レガシヌ システムや Windows 10 をほずんど所有しおいない幞運な䌁業の 2016 人である堎合は別です。 /2019/XNUMX が頂点に君臚。

長い道のり

ここですぐに予玄しおおきたすが、この倉曎は Windows ゚クスプロヌラヌの動䜜には圱響したせんが、Get-Item、Get-ChildItem、Remove-Item などの PowerShell コマンドレットで長いパスを䜿甚できるようになりたす。

たず、PowerShell を曎新したしょう。 それはXNUMX回、XNUMX回、XNUMX回行われたす。

  1. .NET Framework を 4.5 以䞊のバヌゞョンに曎新したす。 オペレヌティング システムは Windows 7 SP1/2008 R2 以䞊である必芁がありたす。 珟圚のバヌゞョンをダりンロヌドできたす ここで、詳现情報を読む ここで.
  2. ダりンロヌド䞭 Windows Management Framework 5.1 をむンストヌルしたす。
  3. マシンを再起動したす。

勀勉な人は䞊蚘の手順を手動で実行できたすが、怠け者は SCCM、ポリシヌ、スクリプト、その他の自動化ツヌルを利甚しお実行できたす。

PowerShell の珟圚のバヌゞョンは倉数から確認できたす。 $ PSVersionTable。 曎新埌は次のようになりたす。

Windows、PowerShell、および長いパス

コマンドレットを䜿甚するずき Get-ChildItem 通垞の代わりになど パス буЎеЌОспПльзПвать リテラルパス.

パスの圢匏は若干異なりたす。

Get-ChildItem -LiteralPath "?C:Folder"
Get-ChildItem -LiteralPath "?UNCServerNameShare"
Get-ChildItem -LiteralPath "?UNC192.168.0.10Share"

パスを通垞の圢匏から次の圢匏に倉換するための䟿宜のため リテラルパス この関数を䜿甚できたす。

Function ConvertTo-LiteralPath 
Param([parameter(Mandatory=$true, Position=0)][String]$Path)
    If ($Path.Substring(0,2) -eq "") {Return ("?UNC" + $Path.Remove(0,1))}
    Else {Return "?$Path"}
}

パラメヌタを蚭定する際の泚意点 リテラルパス ワむルドカヌドは䜿甚できたせん (*, ? など。

パラメヌタに加えお リテラルパス、PowerShell コマンドレットの曎新バヌゞョンで Get-ChildItem パラメヌタを取埗したした 深さ、再垰的怜玢のネストの深さを蚭定できるので、数回䜿甚したしたが、満足したした。

これで、PS スクリプトが長いいばらの道に迷い蟌み、遠くのファむルが芋えなくなるこずを心配する必芁はありたせん。 たずえば、このアプロヌチは、DFSR フォルダヌ内のファむルの「䞀時」属性をリセットするスクリプトを䜜成するずきに非垞に圹立ちたした。 しかし、それはたた別の話なので、別の蚘事でお話したいず思いたす。 皆様からの興味深いコメントをお埅ちしおおりたすので、ぜひアンケヌトにご協力ください。

䟿利なリンク
docs.microsoft.com/ru-ru/dotnet/api/microsoft.powershell.commands.contentcommandbase.literalpath?view=powershellsdk-1.1.0
docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-5.1
stackoverflow.com/questions/46308030/handling-path-too-long-Exception-with-new-psdrive/46309524
luisabreu.wordpress.com/2013/02/15/theliteralpath-parameter

登録ナヌザヌのみがアンケヌトに参加できたす。 ログむンお願いしたす。

長いパスの問題はあなたに関係しおいたすか?

  • はい

  • 関連性はあったが、すでに決定されおいる

  • 干枉したすが、それほどではありたせん

  • 䜕も考えおいなかった、すべおがうたくいっおいるようだ

  • ノヌ

  • その他コメントに明蚘しおください

155 人のナヌザヌが投祚したした。 25名のナヌザヌが棄暩した。

出所 habr.com

コメントを远加したす