
Saya pikir Anda, seperti saya, sudah sering melihat jalur formulir
\ !!! Penting \ ____ Baru ____ \ !!! Jangan hapus !!! \ Pesan No. 98819-649-B tanggal 30 Februari 1985 pada penunjukan Kozlov Ivan Aleksandrovich sebagai kepala sementara departemen untuk mengawal klien VIP perusahaan dan mengatur pertemuan bisnis di sela-sela.doc .
Dan seringkali membuka dokumen seperti itu di Windows tidak langsung berfungsi. Seseorang mempraktikkan solusi dalam bentuk pemetaan disk, seseorang menggunakan manajer file yang dapat bekerja dengan jalur panjang: Manajer Jauh, Total Komandan dan sejenisnya. Dan banyak lagi yang menyaksikan dengan sedih ketika mereka menciptakan naskah-PS, yang merupakan banyak pekerjaan dan yang bekerja di lingkungan uji dengan ledakan, di lingkungan pertempuran tanpa daya mengeluh tentang tugas yang tidak mungkin:
Jalur yang ditentukan, nama file, atau keduanya terlalu panjang . Nama file yang sepenuhnya memenuhi syarat harus kurang dari 260 karakter, dan nama direktori harus kurang dari 248 karakter.Ternyata, 260 karakter sudah cukup "tidak hanya untuk semua orang." Jika Anda tertarik untuk melampaui batas yang diizinkan - saya minta kucing.
Berikut adalah beberapa konsekuensi menyedihkan dari membatasi panjang path file:
Sedikit menyimpang dari topik, saya perhatikan bahwa untuk Replikasi DFS masalah yang dipertimbangkan dalam artikel tidak mengerikan dan file dengan nama panjang berhasil melakukan perjalanan dari server ke server (kecuali, tentu saja, Anda
melakukan semuanya
dengan benar sisanya).
Saya juga ingin menarik perhatian pada utilitas
robocopy yang sangat berguna
yang membantu saya lebih dari sekali. Dia juga tidak takut jalan panjang, dan dia tahu banyak. Karena itu, jika tugasnya adalah menyalin / mentransfer data file, Anda dapat berhenti melakukannya. Jika Anda perlu perdukunan dengan daftar kontrol akses sistem file (DACL), lihat
subinacl . Meskipun usianya cukup besar, ia menunjukkan hasil yang sangat baik pada Windows 2012 R2. Metode aplikasi dibahas di sini.
Sangat menarik bagi saya untuk mengajar bekerja dengan PowerShell. Bersamanya hampir seperti dalam anekdot berjanggut tentang Ivan Tsarevich dan Vasilisa yang Indah.
Cara cepat
Pergi ke
Linux dan jangan mengukus Windows 10/2016/2019 dan mengaktifkan pengaturan Kebijakan Grup / klik registri. Saya tidak akan membahas metode ini secara rinci, karena sudah ada banyak artikel di jaringan tentang topik ini, misalnya yang
ini .
Mengingat bahwa di sebagian besar perusahaan ada banyak, lebih tepatnya, bukan versi baru dari sistem operasi, metode ini cepat hanya untuk menulis di atas kertas, kecuali, tentu saja, Anda adalah salah satu dari mereka yang beruntung yang memiliki sedikit sistem warisan dan memerintah Windows 10/2016/2019 .
Jauh
Di sini kami segera membuat reservasi bahwa perubahan tidak akan mempengaruhi perilaku Windows Explorer, tetapi akan memungkinkan untuk menggunakan jalur panjang di cmdlet PowerShell, seperti Get-Item, Get-Item, Get-ChildItem, Remove-Item, dll.
Pertama, tingkatkan PowerShell. Itu dilakukan satu-dua-tiga.
- Kami memperbarui .NET Framework ke versi paling tidak 4.5. Sistem operasi harus setidaknya Windows 7 SP1 / 2008 R2. Versi saat ini dapat diunduh di sini , baca informasi lebih lanjut di sini .
- Unduh dan instal Windows Management Framework 5.1
- Nyalakan kembali mobil.
Orang pekerja keras dapat melakukan langkah-langkah yang dijelaskan di atas secara manual, yang malas - dengan bantuan SCCM, kebijakan, skrip, dan berbagai alat otomatisasi lainnya.
Versi PowerShell saat ini dapat ditemukan dalam variabel
$ PSVersionTable . Setelah pembaruan, seharusnya menjadi seperti ini:

Sekarang, ketika menggunakan cmdlet
Get-ChildItem dan sejenisnya, kita akan menggunakan
LiteralPath alih-alih
Path biasa.
Format lintasan akan sedikit berbeda:
Get-ChildItem -LiteralPath "\\?\C:\Folder" Get-ChildItem -LiteralPath "\\?\UNC\ServerName\Share" Get-ChildItem -LiteralPath "\\?\UNC\192.168.0.10\Share"
Untuk kenyamanan mengubah jalur dari format yang akrab ke format
LiteralPath ,
Anda dapat menggunakan fungsi ini:
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"} }
Harap dicatat bahwa Anda tidak dapat menggunakan wildcard (
* ,
? , Etc) saat menentukan parameter
LiteralPath .
Selain parameter
LiteralPath , dalam versi PowerShell yang diperbarui, cmdlet
Get-ChildItem menerima parameter
Kedalaman , yang dengannya Anda dapat mengatur kedalaman bersarang untuk pencarian rekursif, saya menggunakannya beberapa kali dan merasa puas.
Sekarang Anda tidak perlu takut bahwa skrip PS Anda akan tersesat dan tidak akan melihat file yang jauh. Sebagai contoh, pendekatan ini banyak membantu saya ketika menulis skrip untuk menjatuhkan atribut "sementara" pada file di folder DFSR. Tapi ini cerita lain, yang akan saya coba ceritakan di artikel lain.
UPD 07/06/2019: Artikel yang dijanjikanSaya menunggu komentar menarik dari Anda dan menyarankan Anda mengikuti survei.
Tautan yang bermanfaat:docs.microsoft.com/en-us/dotnet/api/microsoft.powershell.commands.contentcommandbase.literalpath?view=powershellsdk-1.1.0docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-5.1stackoverflow.com/questions/46308030/handling-path-too-long-exception-with-new-psdrive/46309524luisabreu.wordpress.com/2013/02/15/theliteralpath-parameter