Windows、PowerShell 和長路徑

Windows、PowerShell 和長路徑

我想你和我一樣,經常看到表格的路徑 !!! 重要____新____! 不要刪除!!!98819 年 649 月 30 日的訂單號 1985-XNUMX-B 關於任命 Ivan Aleksandrovich Kozlov 為支持企業 VIP 客戶和在場外組織商務會議的部門代理負責人。.

通常您無法立即在 Windows 中打開此類文檔。 有人以磁盤映射的形式實踐解決方法,有人使用可以處理長路徑的文件管理器:Far Manager、Total Commander 等。 還有更多的人悲傷地看著他們創建的 PS 腳本,其中投入了大量的工作,並且在測試環境中大放異彩,在戰鬥環境中,無奈地抱怨一項不可能完成的任務: 指定的路徑、文件名或兩者都太長。 完全限定文件名必須少於 260 個字符,目錄名必須少於 248 個字符。
事實證明,260 個字符“不僅適用於所有人”就足夠了。 如果您有興趣超越允許的範圍,我會在 cat 下詢問。

以下是限製文件路徑長度的一些不幸後果:

稍微偏離主題,我注意到對於 DFS 複製,文章中考慮的問題並不可怕,長名稱的文件成功地從一個服務器傳輸到另一個服務器(當然,除非你 做對了).

我還想提請注意一個非常有用的實用程序,它不止一次幫助過我 ROBOCOPY. 她也不怕路漫漫其修遠兮,見多識廣。 因此,如果任務歸結為複制/傳輸文件數據,您可以就此打住。 如果您需要處理文件系統訪問控制列表 (DACL),請移開視線 亞硝酸鹽. 儘管年代久遠,但它在 Windows 2012 R2 上完美地展現了自己。 這裡 考慮應用方法。

我也有興趣學習如何使用長 PowerShell 路徑。 和他在一起,幾乎就像是關於伊万沙皇和美麗的瓦西里薩的大鬍子笑話。

快捷方式

切換到 Linux,不用擔心 Windows 10/2016/2019 並啟用適當的組策略設置/註冊表調整。 我不會詳細介紹這個方法,因為。 網上已經有很多關於這個主題的文章,例如, .

考慮到在大多數公司中有很多,委婉地說,不是新版本的操作系統,這種方法僅用於在紙上書寫是快速的,當然,除非你是那些幾乎沒有遺留系統和 Windows 的幸運者之一10/2016/2019 統治。

很長的路要走

在這裡我們立即做出保留,這些更改不會影響 Windows 資源管理器的行為,但可以在 PowerShell cmdlet 中使用長路徑,例如 Get-Item、Get-ChildItem、Remove-Item 等。

首先,讓我們更新 PowerShell。 已經完成一、二、三。

  1. 我們將 .NET Framework 更新到至少 4.5 的版本。 操作系統必須至少為 Windows 7 SP1/2008 R2。 當前版本可以下載 這裡閱讀更多信息 這裡.
  2. 正在下載 並安裝 Windows Management Framework 5.1
  3. 我們重新啟動機器。

勤奮的人可以手動完成上述步驟,懶惰的人可以藉助 SCCM、策略、腳本和其他自動化工具來完成。

PowerShell 的當前版本可以從變量中找到 $PS版本表. 更新後應該是這樣的:

Windows、PowerShell 和長路徑

現在使用 cmdlet 時 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 cmdlet 中 GET-ChildItem 接收到的參數 深度,你可以用它來設置遞歸搜索的嵌套深度,我用了幾次並且很滿意。

現在您不必擔心您的 PS 腳本會從一條棘手的長途中誤入歧途,並且不會看到遠處的文件。 例如,在編寫腳本以重置 DFSR 文件夾中文件的“臨時”屬性時,這種方法對我有很大幫助。 但這是另一個故事,我將在另一篇文章中嘗試講述。 我正在等待您的有趣評論,我建議您進行一項調查。

相關鏈接:
docs.microsoft.com/en-us/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-參數

只有註冊用戶才能參與調查。 登入, 請。

長路徑問題與您有關嗎?

  • Да

  • 相關,但已經決定

  • 有影響,但不大

  • 沒想到,似乎一切正常

  • 沒有

  • 其他(備註說明)

155 位用戶投票。 25 名用戶棄權。

來源: www.habr.com

添加評論