Windows, PowerShell og Long Paths

Windows, PowerShell og Long Paths

Ég held að þú, eins og ég, hafir séð svona slóðir oftar en einu sinni !!! Mikilvægt____Nýtt____!!! Ekki eyða!!! Pöntunarnúmer 98819-649-B dagsett 30. febrúar 1985 um skipun Ivan Aleksandrovich Kozlov sem tímabundið starfandi yfirmaður deildarinnar fyrir stuðning við VIP viðskiptavinum fyrirtækja og skipulagningu viðskiptafunda á hliðarlínunni.doc.

Og oft muntu ekki geta opnað slíkt skjal í Windows strax. Sumir æfa lausn í formi diskakortlagningar, aðrir nota skráastjóra sem geta unnið með langar leiðir: Far Manager, Total Commander og þess háttar. Og margir fleiri horfðu sorgmæddir á PS-handritið sem þeir bjuggu til, þar sem mikil vinna var lögð í og ​​sem virkaði með hvelli í prófunarumhverfinu, í framleiðsluumhverfi kvartuðu máttlaus yfir ómögulegu verkefni: Tilgreind slóð, skráarheiti eða bæði eru of löng. Fullgilt skráarnafnið verður að vera minna en 260 stafir og nafn möppunnar verður að vera minna en 248 stafir.
Eins og það kemur í ljós, eru 260 stafir nóg "ekki bara fyrir alla." Ef þú hefur áhuga á að fara út fyrir mörk þess sem leyfilegt er, vinsamlegast vísaðu á köttinn.

Hér eru aðeins nokkrar af óheppilegum afleiðingum þess að takmarka lengd skráarslóðar:

Ég vík aðeins frá efninu, ég tek fram að fyrir DFS afritun er vandamálið sem fjallað er um í greininni ekki hræðilegt og skrár með löngum nöfnum ferðast með góðum árangri frá netþjóni til netþjóns (ef, auðvitað, allt annað er gert rétt).

Ég vil líka vekja athygli ykkar á mjög gagnlegu tóli sem hefur hjálpað mér oftar en einu sinni robocopy. Hún er heldur ekki hrædd við langar leiðir og getur margt. Þess vegna, ef verkefnið snýst um að afrita / flytja skráargögn, geturðu hætt þar. Ef þú þarft að bregðast við með skráarkerfi aðgangsstýringarlistum (DACL), líttu undan subinucl.. Þrátt fyrir háan aldur stóð hann sig frábærlega á Windows 2012 R2. Тут aðferðir við beitingu eru skoðaðar.

Ég hafði áhuga á að kenna hvernig á að vinna með langar PowerShell slóðir. Hjá honum er þetta næstum eins og í skeggjaða brandara um Ivan Tsarevich og Vasilisu hinn fagra.

Fljótur leið

Skiptu yfir í Linux og hafðu ekki áhyggjur af Windows 10/2016/2019 og virkjaðu viðeigandi hópstefnustillingu/knúsaðu skrána. Ég ætla ekki að fjölyrða um þessa aðferð í smáatriðum, því... Nú þegar eru margar greinar um þetta efni á netinu, td. þetta.

Miðað við að flest fyrirtæki eru með margar, vægast sagt, ekki nýjustu útgáfur af stýrikerfum, þá er þessi aðferð fljótleg aðeins til að skrifa á pappír, nema auðvitað að þú sért einn af þeim heppnu sem er með fá eldri kerfi og Windows 10 /2016/2019 ræður ríkjum .

Langa leiðin

Við skulum strax gera fyrirvara hér um að breytingarnar muni ekki hafa áhrif á hegðun Windows Explorer, heldur gera það mögulegt að nota langar leiðir í PowerShell cmdlets, eins og Get-Item, Get-ChildItem, Remove-Item, o.s.frv.

Fyrst skulum við uppfæra PowerShell. Það er gert einu, tveimur, þrisvar sinnum.

  1. Við uppfærum .NET Framework í ekki lægri útgáfu en 4.5. Stýrikerfið verður að vera að minnsta kosti Windows 7 SP1/2008 R2. Þú getur halað niður núverandi útgáfu hér, lestu frekari upplýsingar hér.
  2. Niðurhal og settu upp Windows Management Framework 5.1
  3. Við endurræsum vélina.

Duglegt fólk getur gert skrefin sem lýst er hér að ofan handvirkt, latir geta gert það með hjálp SCCM, stefnu, forskrifta og annarra sjálfvirkniverkfæra.

Núverandi útgáfu af PowerShell er að finna úr breytunni $PSVersionTable. Eftir uppfærsluna ætti það að líta eitthvað svona út:

Windows, PowerShell og Long Paths

Nú þegar þú notar cmdlets Get-ChildItem og þess háttar í stað þess venjulega Path við munum nota bókstafsstígur.

Slóðarsniðið verður aðeins öðruvísi:

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

Til þæginda við að breyta slóðum úr venjulegu sniði yfir í sniðið bókstafsstígur þú getur notað þessa aðgerð:

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

Vinsamlegast athugaðu að þegar þú stillir færibreytuna bókstafsstígur Þú getur ekki notað jokertákn (*, ? og svo framvegis).

Í viðbót við breytu bókstafsstígur, í uppfærðri útgáfu af PowerShell cmdlet Get-ChildItem fékk færibreytuna Dýpt, sem þú getur stillt varpdýptina fyrir endurkvæma leit, notaði ég það nokkrum sinnum og var sáttur.

Nú þarftu ekki að hafa áhyggjur af því að PS-handritið þitt fari afvega eftir langri þyrnum stráðum og geti ekki séð fjarlægar skrár. Til dæmis hjálpaði þessi nálgun mér mikið þegar ég skrifaði handrit til að endurstilla „tímabundinn“ eiginleika skráa í DFSR möppum. En það er önnur saga, sem ég mun reyna að segja í annarri grein. Ég bíð spenntur eftir áhugaverðum athugasemdum frá þér og legg til að þú takir könnunina.

Gagnlegar hlekkir:
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

Aðeins skráðir notendur geta tekið þátt í könnuninni. Skráðu þig inn, takk.

Er vandamálið um langar leiðir viðeigandi fyrir þig?

  • Var viðeigandi, en þegar ákveðið

  • Það truflar, en ekki mikið

  • Ég hugsaði ekki um það, allt virðist vera að virka

  • No

  • Annað (vinsamlega tilgreinið í athugasemdum)

155 notendur kusu. 25 notendur sátu hjá.

Heimild: www.habr.com

Bæta við athugasemd