Windows, PowerShell và Đường dẫn dài

Windows, PowerShell và Đường dẫn dài

Tôi nghĩ bạn cũng như tôi, đã thường xuyên nhìn thấy những con đường có dạng !!! Quan trọng____Mới____!!! Đừng xóa!!! Lệnh số 98819-649-B ngày 30 tháng 1985 năm XNUMX về việc bổ nhiệm Ivan Aleksandrovich Kozlov làm quyền trưởng phòng hỗ trợ các khách hàng VIP của công ty và tổ chức các cuộc họp kinh doanh bên lề.doc.

Và thường thì bạn sẽ không thể mở ngay một tài liệu như vậy trong Windows. Ai đó thực hành cách giải quyết dưới dạng ánh xạ đĩa, ai đó sử dụng trình quản lý tệp có thể hoạt động với các đường dẫn dài: Far Manager, Total Commander, v.v. Và nhiều người buồn bã hơn khi xem cách họ tạo ra tập lệnh PS, trong đó rất nhiều công việc đã được đầu tư và hoạt động hiệu quả trong môi trường thử nghiệm, trong môi trường chiến đấu phàn nàn một cách bất lực về một nhiệm vụ bất khả thi: Đường dẫn được chỉ định, tên tệp hoặc cả hai đều quá dài. Tên tệp đủ điều kiện phải ít hơn 260 ký tự và tên thư mục phải ít hơn 248 ký tự.
Hóa ra, 260 ký tự là đủ "không chỉ cho tất cả mọi người." Nếu bạn quan tâm đến việc vượt ra ngoài ranh giới của những gì được phép, tôi hỏi dưới con mèo.

Đây chỉ là một số hậu quả đáng tiếc của việc giới hạn độ dài đường dẫn tệp:

Hơi khác so với chủ đề, tôi lưu ý rằng đối với Bản sao DFS, vấn đề được xem xét trong bài viết không phải là khủng khiếp và các tệp có tên dài di chuyển thành công từ máy chủ này sang máy chủ khác (tất nhiên, trừ khi bạn làm đúng).

Tôi cũng muốn thu hút sự chú ý đến một tiện ích rất hữu ích đã hơn một lần giúp tôi robocopy. Cô ấy cũng vậy, không sợ những con đường dài, và cô ấy biết rất nhiều. Do đó, nếu nhiệm vụ là sao chép / truyền dữ liệu tệp, bạn có thể dừng lại ở đó. Nếu bạn cần loay hoay với danh sách kiểm soát truy cập hệ thống tệp (DACL), hãy nhìn đi chỗ khác tiểu ban. Mặc dù đã có tuổi đời đáng kể nhưng nó vẫn thể hiện hoàn hảo trên Windows 2012 R2. Đây phương pháp áp dụng được xem xét.

Tôi cũng quan tâm đến việc học cách làm việc với các đường dẫn PowerShell dài. Với anh ta, gần giống như trong một trò đùa có râu về Ivan Tsarevich và Vasilisa the Beautiful.

Cách nhanh

Chuyển sang Linux và đừng lo lắng về Windows 10/2016/2019 và bật cài đặt chính sách nhóm/chỉnh sửa sổ đăng ký phù hợp. Tôi sẽ không đi sâu vào phương pháp này một cách chi tiết, bởi vì. đã có nhiều bài viết trên mạng về chủ đề này, ví dụ, cái này.

Xem xét rằng ở hầu hết các công ty, có rất nhiều phiên bản hệ điều hành không phải mới, nói một cách nhẹ nhàng, phương pháp này chỉ nhanh chóng để viết trên giấy, tất nhiên, trừ khi bạn là một trong những người may mắn có ít hệ thống cũ và Windows 10/2016/2019 trị vì .

đường dài

Ở đây, chúng tôi ngay lập tức đảm bảo rằng các thay đổi sẽ không ảnh hưởng đến hành vi của Windows Explorer, nhưng sẽ cho phép sử dụng các đường dẫn dài trong lệnh ghép ngắn PowerShell, chẳng hạn như Get-Item, Get-ChildItem, Remove-Item, v.v.

Trước tiên, hãy cập nhật PowerShell. Một, hai, ba là xong.

  1. Chúng tôi cập nhật .NET Framework lên phiên bản ít nhất là 4.5. Hệ điều hành ít nhất phải là Windows 7 SP1/2008 R2. Phiên bản hiện tại có thể được tải xuống đâyđọc thêm thông tin đây.
  2. Đang tải xuống và cài đặt Windows Management Framework 5.1
  3. Chúng tôi khởi động lại máy.

Người chăm chỉ có thể thực hiện các bước trên một cách thủ công, người lười biếng có thể thực hiện với sự trợ giúp của SCCM, chính sách, tập lệnh và các công cụ tự động hóa khác.

Phiên bản hiện tại của PowerShell có thể được tìm thấy từ biến $ PSVersionTable. Sau khi cập nhật, nó sẽ trông như thế này:

Windows, PowerShell và Đường dẫn dài

Bây giờ khi sử dụng lệnh ghép ngắn Nhận-ConItem và những người khác thích anh ấy thay vì bình thường Đường dẫn chúng tôi sẽ sử dụng Đường dẫn chữ.

Định dạng của các đường dẫn sẽ hơi khác một chút:

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

Để thuận tiện cho việc chuyển đổi đường dẫn từ định dạng thông thường sang định dạng Đường dẫn chữ bạn có thể sử dụng chức năng này:

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"}
}

Xin lưu ý rằng khi cài đặt tham số Đường dẫn chữ ký tự đại diện không thể được sử dụng (*, ? và vân vân).

Ngoài tham số Đường dẫn chữ, trong lệnh ghép ngắn PowerShell đã cập nhật Nhận-ConItem tham số nhận được Độ sâu, mà bạn có thể đặt độ sâu lồng nhau cho tìm kiếm đệ quy, tôi đã sử dụng nó một vài lần và hài lòng.

Giờ đây, bạn không thể sợ rằng tập lệnh PS của mình sẽ đi chệch hướng trên một con đường dài đầy chông gai và sẽ không nhìn thấy các tệp ở xa. Ví dụ: cách tiếp cận này đã giúp tôi rất nhiều khi viết tập lệnh để đặt lại thuộc tính “tạm thời” của các tệp trong thư mục DFSR. Nhưng đây là một câu chuyện khác, mà tôi sẽ cố gắng kể trong một bài viết khác. Tôi đang chờ những nhận xét thú vị từ bạn và tôi khuyên bạn nên tham gia một cuộc khảo sát.

Liên kết hữu ích:
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.man Quản lý/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

Chỉ những người dùng đã đăng ký mới có thể tham gia khảo sát. Đăng nhập, xin vui lòng.

Vấn đề về những con đường dài có liên quan đến bạn không?

  • vâng

  • Có liên quan, nhưng đã được quyết định

  • Có can thiệp nhưng không nhiều

  • Không nghĩ về nó, mọi thứ dường như đang hoạt động

  • Không

  • Khác (ghi rõ trong phần bình luận)

155 người dùng bình chọn. 25 người dùng bỏ phiếu trắng.

Nguồn: www.habr.com

Thêm một lời nhận xét