Windows, PowerShell, dan Jalur Panjang

Windows, PowerShell, dan Jalur Panjang

Saya rasa Anda, seperti saya, telah melihat jalan seperti ini lebih dari sekali !!! Penting____Baru____!!! Jangan dihapus!!!Nomor Surat Perintah 98819-649-B tanggal 30 Februari 1985 tentang penunjukan Ivan Aleksandrovich Kozlov sebagai penjabat sementara kepala departemen untuk mendukung klien VIP perusahaan dan mengatur pertemuan bisnis di sela-sela.doc.

Dan seringkali Anda tidak dapat langsung membuka dokumen seperti itu di Windows. Beberapa orang mempraktikkan solusi dalam bentuk pemetaan disk, yang lain menggunakan pengelola file yang dapat bekerja dengan jalur panjang: Far Manager, Total Commander dan sejenisnya. Dan lebih banyak lagi yang menyaksikan dengan sedih skrip PS yang mereka buat, di mana banyak pekerjaan diinvestasikan dan bekerja dengan keras di lingkungan pengujian, di lingkungan produksi tanpa daya mengeluh tentang tugas yang mustahil: Jalur yang ditentukan, nama file, atau keduanya terlalu panjang. Nama file yang 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, silakan merujuk ke kucing.

Berikut adalah beberapa konsekuensi buruk dari pembatasan panjang jalur file:

Sedikit menyimpang dari topik, saya perhatikan bahwa untuk Replikasi DFS, masalah yang dibahas dalam artikel ini tidak buruk dan file dengan nama panjang berhasil berpindah dari server ke server (jika, tentu saja, yang lainnya adalah dilakukan dengan benar).

Saya juga ingin menarik perhatian Anda ke utilitas yang sangat berguna yang telah membantu saya lebih dari sekali robocopy. Dia juga tidak takut dengan jalan yang panjang, dan dia bisa melakukan banyak hal. Oleh karena itu, jika tugasnya adalah menyalin/mentransfer data file, Anda dapat berhenti di situ. Jika Anda perlu bermain-main dengan daftar kontrol akses sistem file (DACL), lihatlah ke arah lain subinac. Meskipun usianya sudah lanjut, kinerjanya sangat baik di Windows 2012 R2. Di sini metode penerapan dipertimbangkan.

Saya tertarik untuk mengajarkan cara bekerja dengan jalur PowerShell yang panjang. Baginya, ini hampir seperti lelucon berjanggut tentang Ivan Tsarevich dan Vasilisa si Cantik.

Cara cepat

Beralih ke Linux dan jangan khawatir tentang Windows 10/2016/2019 dan aktifkan pengaturan kebijakan grup yang sesuai/tweak registri. Saya tidak akan membahas metode ini secara detail, karena... Sudah banyak artikel tentang topik ini di Internet, misalnya, ini.

Mengingat sebagian besar perusahaan memiliki banyak, secara halus, bukan versi terbaru 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 lama dan Windows 10 /2016/2019 berkuasa.

Jauh sekali

Mari kita segera membuat reservasi di sini bahwa perubahan tersebut tidak akan mempengaruhi perilaku Windows Explorer, tetapi akan memungkinkan untuk menggunakan jalur panjang di cmdlet PowerShell, seperti Get-Item, Get-ChildItem, Remove-Item, dll.

Pertama, mari perbarui PowerShell. Itu dilakukan satu, dua, tiga kali.

  1. Kami memperbarui .NET Framework ke versi tidak lebih rendah dari 4.5. Sistem operasi minimal harus Windows 7 SP1/2008 R2. Anda dapat mengunduh versi saat ini di sini, baca informasi lebih lanjut di sini.
  2. Unduh dan instal Kerangka Manajemen Windows 5.1
  3. Kami me-reboot mesin.

Orang yang pekerja keras dapat melakukan langkah-langkah yang dijelaskan di atas secara manual, orang yang malas dapat melakukannya dengan bantuan SCCM, kebijakan, skrip, dan alat otomatisasi lainnya.

Versi PowerShell saat ini dapat ditemukan dari variabel $PSVersionTable. Setelah pembaruan, tampilannya akan seperti ini:

Windows, PowerShell, dan Jalur Panjang

Sekarang saat menggunakan cmdlet Dapatkan-ChildItem dan sejenisnya, bukan seperti biasanya xtra ем ользовать jalur literal.

Format jalur akan sedikit berbeda:

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

Untuk kenyamanan mengonversi jalur dari format biasa ke format jalur literal 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 saat mengatur parameter jalur literal Anda tidak dapat menggunakan karakter pengganti (*, ? dan seterusnya).

Selain parameternya jalur literal, di cmdlet PowerShell versi terbaru Dapatkan-ChildItem mendapat parameternya Kedalaman, yang dengannya Anda dapat mengatur kedalaman sarang untuk pencarian rekursif, saya menggunakannya beberapa kali dan merasa puas.

Sekarang Anda tidak perlu khawatir skrip PS Anda akan tersesat di sepanjang jalan yang panjang dan sulit dan tidak dapat melihat file yang jauh. Misalnya, pendekatan ini banyak membantu saya ketika menulis skrip untuk mereset atribut “sementara” file di folder DFSR. Tapi itu cerita lain, yang akan saya coba ceritakan di artikel lain. Saya menantikan komentar menarik dari Anda dan menyarankan Anda mengikuti survei.

Tautan yang bermanfaat:
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

Hanya pengguna terdaftar yang dapat berpartisipasi dalam survei. Masuk, silakan.

Apakah masalah perjalanan panjang relevan bagi Anda?

  • Ya

  • Relevan, tapi sudah diputuskan

  • Itu mengganggu, tapi tidak banyak

  • Saya tidak memikirkannya, semuanya tampak berfungsi

  • Tidak

  • Lainnya (silakan sebutkan di komentar)

155 pengguna memilih. 25 pengguna abstain.

Sumber: www.habr.com

Tambah komentar