Windows, PowerShell, at Long Path

Windows, PowerShell, at Long Path

Sa tingin ko, ikaw, tulad ko, ay nakakita ng mga landas na tulad nito nang higit sa isang beses !!! Mahalaga____Bago____!!! Huwag tanggalin!!! Order No. 98819-649-B na may petsang Pebrero 30, 1985 sa paghirang kay Ivan Aleksandrovich Kozlov bilang pansamantalang kumikilos na pinuno ng departamento para sa pagsuporta sa mga kliyenteng VIP ng korporasyon at pag-aayos ng mga pulong sa negosyo sa sidelines.doc.

At kadalasan ay hindi mo mabubuksan kaagad ang naturang dokumento sa Windows. Ang ilang mga tao ay nagsasagawa ng workaround sa anyo ng disk mapping, ang iba ay gumagamit ng mga file manager na maaaring gumana sa mahabang landas: Far Manager, Total Commander at iba pa. At marami pang iba ang nanood nang may kalungkutan habang ang PS script na kanilang nilikha, kung saan maraming trabaho ang namuhunan at kung saan ay nagtrabaho nang malakas sa kapaligiran ng pagsubok, sa isang kapaligiran ng produksyon ay walang magawa na nagreklamo tungkol sa isang imposibleng gawain: Masyadong mahaba ang tinukoy na path, pangalan ng file, o pareho. Ang ganap na kwalipikadong pangalan ng file ay dapat na mas mababa sa 260 character, at ang pangalan ng direktoryo ay dapat na mas mababa sa 248 character.
Sa lumalabas, sapat na ang 260 character "hindi lang para sa lahat." Kung interesado kang lumampas sa mga hangganan ng kung ano ang pinahihintulutan, mangyaring sumangguni sa pusa.

Narito ang ilan lamang sa mga kapus-palad na kahihinatnan ng paglilimita sa haba ng landas ng file:

Bahagyang lumihis sa paksa, napapansin ko na para sa DFS Replication ang problemang tinalakay sa artikulo ay hindi kakila-kilabot at ang mga file na may mahabang pangalan ay matagumpay na naglalakbay mula sa server patungo sa server (kung, siyempre, lahat ng iba pa ay ginawa ng tama).

Gusto ko ring ituon ang iyong pansin sa isang napaka-kapaki-pakinabang na utility na nakatulong sa akin nang higit sa isang beses robocopy. Hindi rin siya natatakot sa mahabang landas, at marami siyang magagawa. Samakatuwid, kung ang gawain ay bumagsak sa pagkopya/paglipat ng data ng file, maaari kang huminto doon. Kung kailangan mong maglaro gamit ang mga file system access control list (DACLs), tumingin sa malayo subinacl. Sa kabila ng katandaan nito, mahusay itong gumanap sa Windows 2012 R2. Dito ang mga paraan ng aplikasyon ay isinasaalang-alang.

Interesado akong magturo kung paano magtrabaho sa mahabang PowerShell path. Sa kanya ito ay halos tulad ng sa isang may balbas na biro tungkol kay Ivan Tsarevich at Vasilisa the Beautiful.

Mabilis na paraan

Lumipat sa Linux at huwag mag-alala tungkol sa Windows 10/2016/2019 at paganahin ang naaangkop na setting ng patakaran ng grupo/i-tweak ang registry. Hindi ko tatalakayin nang detalyado ang pamamaraang ito, dahil... Mayroon nang maraming mga artikulo sa paksang ito sa Internet, halimbawa, ito.

Isinasaalang-alang na ang karamihan sa mga kumpanya ay may marami, sa madaling salita, hindi ang pinakabagong mga bersyon ng mga operating system, ang pamamaraang ito ay mabilis lamang para sa pagsusulat sa papel, maliban kung, siyempre, isa ka sa mga masuwerteng iyon na may kaunting mga legacy system at Windows 10 /2016/2019 ang naghahari .

Ang mahabang daan

Agad tayong magpareserba dito na ang mga pagbabago ay hindi makakaapekto sa gawi ng Windows Explorer, ngunit gagawing posible na gumamit ng mahahabang landas sa PowerShell cmdlet, gaya ng Get-Item, Get-ChildItem, Remove-Item, atbp.

Una, i-update natin ang PowerShell. Ginagawa ito ng isa, dalawa, tatlong beses.

  1. Ina-update namin ang .NET Framework sa bersyon na hindi bababa sa 4.5. Ang operating system ay dapat na hindi bababa sa Windows 7 SP1/2008 R2. Maaari mong i-download ang kasalukuyang bersyon dito, magbasa ng higit pang impormasyon dito.
  2. Pag-download at i-install ang Windows Management Framework 5.1
  3. I-reboot namin ang makina.

Maaaring gawin ng mga masisipag na tao ang mga hakbang na inilarawan sa itaas nang manu-mano, magagawa ito ng mga tamad sa tulong ng SCCM, mga patakaran, script at iba pang mga tool sa automation.

Ang kasalukuyang bersyon ng PowerShell ay makikita mula sa variable $PSVersionTable. Pagkatapos ng pag-update dapat itong magmukhang ganito:

Windows, PowerShell, at Long Path

Ngayon kapag gumagamit ng mga cmdlet Get-ChildItem at ang katulad sa halip na karaniwan Landas gagamitin natin literalPath.

Ang format ng path ay bahagyang mag-iiba:

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

Para sa kaginhawaan ng pag-convert ng mga landas mula sa karaniwang format patungo sa format literalPath maaari mong gamitin ang function na ito:

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

Pakitandaan na kapag nagtatakda ng parameter literalPath Hindi ka maaaring gumamit ng mga wildcard (*, ? at iba pa).

Bilang karagdagan sa parameter literalPath, sa na-update na bersyon ng PowerShell cmdlet Get-ChildItem nakuha ang parameter Lalim, kung saan maaari mong itakda ang lalim ng nesting para sa recursive na paghahanap, ginamit ko ito ng ilang beses at nasiyahan.

Ngayon ay hindi mo na kailangang mag-alala na ang iyong PS script ay maliligaw sa mahabang matitinik na landas at hindi na makikita ang malalayong mga file. Halimbawa, ang diskarteng ito ay nakatulong nang malaki sa akin noong nagsusulat ng script para i-reset ang "pansamantalang" katangian ng mga file sa mga folder ng DFSR. Ngunit iyan ay isa pang kuwento, na susubukan kong sabihin sa ibang artikulo. Inaasahan ko ang mga kawili-wiling komento mula sa iyo at iminumungkahi kong kunin mo ang survey.

Mga kapaki-pakinabang na link:
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

Ang mga rehistradong user lamang ang maaaring lumahok sa survey. Mag-sign in, pakiusap

May kaugnayan ba sa iyo ang problema ng mahabang landas?

  • Oo

  • May kaugnayan, ngunit napagpasyahan na

  • Nakakasagabal ito, ngunit hindi gaanong

  • Hindi ko na inisip, parang gumagana ang lahat

  • Hindi

  • Iba pa (mangyaring tukuyin sa mga komento)

155 user ang bumoto. 25 na user ang umiwas.

Pinagmulan: www.habr.com

Magdagdag ng komento