Windows, PowerShell dan Laluan Panjang

Windows, PowerShell dan Laluan Panjang

Saya fikir anda, seperti saya, sering melihat laluan bentuk !!! Penting____Baru____!!! Jangan padam!!! No Pesanan 98819-649-B bertarikh 30 Februari 1985 mengenai pelantikan Ivan Aleksandrovich Kozlov sebagai pemangku ketua jabatan untuk menyokong pelanggan VIP korporat dan menganjurkan mesyuarat perniagaan di luar.doc.

Dan selalunya anda tidak akan dapat membuka dokumen sedemikian dalam Windows dengan segera. Seseorang mempraktikkan penyelesaian dalam bentuk pemetaan cakera, seseorang menggunakan pengurus fail yang boleh berfungsi dengan laluan panjang: Pengurus Jauh, Komander Jumlah dan seumpamanya. Dan lebih banyak lagi sedih menyaksikan bagaimana skrip PS yang mereka cipta, di mana banyak kerja dilaburkan dan yang bekerja dengan hebat dalam persekitaran ujian, dalam persekitaran pertempuran, tanpa daya mengadu tentang tugas yang mustahil: Laluan yang ditentukan, nama fail atau kedua-duanya terlalu panjang. Nama fail yang layak sepenuhnya mestilah kurang daripada 260 aksara dan nama direktori mestilah kurang daripada 248 aksara.
Ternyata, 260 aksara sudah cukup "bukan sahaja untuk semua orang." Jika anda berminat untuk melampaui batas apa yang dibenarkan, saya bertanya di bawah kucing.

Berikut adalah beberapa akibat malang mengehadkan panjang laluan fail:

Sedikit menyimpang dari topik, saya perhatikan bahawa untuk Replikasi DFS, masalah yang dipertimbangkan dalam artikel itu tidak mengerikan dan fail dengan nama panjang berjaya bergerak dari pelayan ke pelayan (kecuali, sudah tentu, jika tidak, anda dilakukan dengan betul).

Saya juga ingin menarik perhatian kepada utiliti yang sangat berguna yang telah membantu saya lebih daripada sekali robocopy. Dia juga tidak takut dengan jalan yang panjang, dan dia tahu banyak perkara. Oleh itu, jika tugas itu datang kepada menyalin / memindahkan data fail, anda boleh berhenti padanya. Jika anda perlu bermain-main dengan senarai kawalan akses sistem fail (DACL), lihat jauh subinacl. Walaupun usianya yang agak besar, ia menunjukkan dirinya dengan sempurna pada Windows 2012 R2. Berikut kaedah permohonan dipertimbangkan.

Saya juga berminat untuk mempelajari cara bekerja dengan laluan PowerShell yang panjang. Dengan dia, hampir seperti dalam jenaka berjanggut tentang Ivan Tsarevich dan Vasilisa yang Cantik.

Cara cepat

Beralih kepada Linux dan jangan risau tentang Windows 10/2016/2019 dan dayakan tetapan dasar kumpulan/ tweak pendaftaran yang sesuai. Saya tidak akan memikirkan kaedah ini secara terperinci, kerana. sudah ada banyak artikel di internet mengenai topik ini, contohnya, эта.

Memandangkan dalam kebanyakan syarikat terdapat banyak, secara ringkasnya, bukan versi sistem pengendalian baharu, kaedah ini pantas hanya untuk menulis di atas kertas, melainkan, sudah tentu, anda adalah salah seorang yang bertuah yang mempunyai beberapa sistem warisan dan Windows. 10/2016/2019 pemerintahan .

jalan jauh

Di sini kami segera membuat tempahan bahawa perubahan itu tidak akan menjejaskan kelakuan Windows Explorer, tetapi akan membolehkan anda menggunakan laluan panjang dalam cmdlet PowerShell, seperti Get-Item, Get-ChildItem, Remove-Item, dsb.

Mula-mula, mari kemas kini PowerShell. Sudah selesai satu, dua, tiga.

  1. Kami mengemas kini Rangka Kerja .NET kepada versi sekurang-kurangnya 4.5. Sistem pengendalian mestilah sekurang-kurangnya Windows 7 SP1/2008 R2. Versi semasa boleh dimuat turun di sinibaca maklumat lanjut di sini.
  2. Muat turun dan pasang Windows Management Framework 5.1
  3. Kami but semula mesin.

Mereka yang rajin boleh melakukan langkah di atas secara manual, mereka yang malas boleh melakukannya dengan bantuan SCCM, polisi, skrip dan alatan automasi yang lain.

Versi semasa PowerShell boleh didapati daripada pembolehubah $PSVersionTable. Selepas kemas kini ia sepatutnya kelihatan seperti ini:

Windows, PowerShell dan Laluan Panjang

Sekarang apabila menggunakan cmdlet Get-ChildItem dan orang lain seperti dia dan bukannya biasa Jalan kami akan gunakan literalPath.

Format laluan akan berbeza sedikit:

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

Untuk kemudahan menukar laluan daripada format biasa kepada format literalPath anda boleh 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"}
}

Sila ambil perhatian bahawa apabila menetapkan parameter literalPath kad bebas tidak boleh digunakan (*, ? dan sebagainya).

Sebagai tambahan kepada parameter literalPath, dalam cmdlet PowerShell yang dikemas kini Get-ChildItem parameter yang diterima Mendalam, yang mana anda boleh menetapkan kedalaman bersarang untuk carian rekursif, saya menggunakannya beberapa kali dan berpuas hati.

Sekarang anda tidak boleh takut bahawa skrip PS anda akan tersasar dari laluan berduri yang panjang dan tidak akan melihat fail yang jauh. Sebagai contoh, pendekatan ini banyak membantu saya semasa menulis skrip untuk menetapkan semula atribut "sementara" untuk fail dalam folder DFSR. Tetapi ini adalah cerita lain, yang akan saya cuba ceritakan dalam artikel lain. Saya sedang menunggu komen menarik daripada anda dan saya cadangkan untuk membuat tinjauan.

Pautan yang berguna:
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/parameter-theliteralpath

Hanya pengguna berdaftar boleh mengambil bahagian dalam tinjauan. Log masuk, Sama-sama.

Adakah masalah laluan panjang berkaitan dengan anda?

  • Ya

  • Adalah relevan, tetapi sudah diputuskan

  • Mengganggu, tetapi tidak banyak

  • Tak sangka, semua nampak berkesan

  • Tiada

  • Lain-lain (nyatakan dalam ulasan)

155 pengguna mengundi. 25 pengguna berpantang.

Sumber: www.habr.com

Tambah komen