Windows, PowerShell in dolge poti

Windows, PowerShell in dolge poti

Mislim, da ste tako kot jaz že večkrat videli takšne poti !!! Pomembno____Novo____!!! Ne briši!!!Naročilo št.98819-649-B z dne 30 o imenovanju Ivana Aleksandroviča Kozlova za začasnega vršilca ​​dolžnosti vodje oddelka za podporo korporativnim VIP strankam in organizacijo poslovnih srečanj ob robu.doc.

In pogosto takšnega dokumenta v sistemu Windows ne boste mogli odpreti takoj. Nekateri ljudje uporabljajo rešitev v obliki preslikave diska, drugi uporabljajo upravitelje datotek, ki lahko delajo z dolgimi potmi: Far Manager, Total Commander in podobno. In še marsikdo je z žalostjo opazoval, kako je PS-skripta, ki sta jo ustvarila in v katero je bilo vloženega veliko dela in je v testnem okolju delovala s pokom, v produkcijskem okolju nemočno tarnala nad nemogočo nalogo: Navedena pot, ime datoteke ali oboje je predolgo. Popolnoma kvalificirano ime datoteke mora biti krajše od 260 znakov, ime imenika pa mora biti krajše od 248 znakov.
Izkazalo se je, da je 260 znakov dovolj "ne samo za vsakogar". Če vas zanima preseganje meja dovoljenega, vas prosimo, da pod kat.

Tukaj je le nekaj nesrečnih posledic omejevanja dolžine poti datoteke:

Če se nekoliko oddaljim od teme, ugotavljam, da za replikacijo DFS težava, obravnavana v članku, ni strašna in datoteke z dolgimi imeni uspešno potujejo od strežnika do strežnika (če je seveda vse ostalo narejeno prav).

Prav tako bi vas rad opozoril na zelo uporaben pripomoček, ki mi je pomagal že več kot enkrat robobopija. Tudi dolgih poti je ni strah, zmore pa marsikaj. Torej, če se naloga zmanjša na kopiranje / prenos podatkov datoteke, se lahko ustavite tam. Če se morate poigrati s seznami za nadzor dostopa do datotečnega sistema (DACL), poglejte stran subinakl. Kljub visoki starosti se je odlično obnesel v sistemu Windows 2012 R2. Tukaj upoštevajo se načini uporabe.

Zanimalo me je poučevanje dela z dolgimi potmi PowerShell. Z njim je skoraj tako kot v bradatem vicu o Ivanu Tsareviču in Vasilisi Lepi.

Hitra pot

Preklopite na Linux in ne skrbite za Windows 10/2016/2019 ter omogočite ustrezno nastavitev pravilnika skupine/prilagodite register. Ne bom se podrobneje ukvarjal s to metodo, ker ... Na internetu je že veliko člankov na to temo, npr. to.

Glede na to, da ima večina podjetij veliko, milo rečeno, ne najnovejših verzij operacijskih sistemov, je ta način hiter le za pisanje na papir, razen če seveda spadate med tiste srečneže, ki imajo malo starih sistemov in Windows 10. /2016/2019 kraljuje.

Dolga pot

Tukaj takoj rezervirajmo, da spremembe ne bodo vplivale na vedenje Raziskovalca Windows, vendar bodo omogočile uporabo dolgih poti v cmdletih PowerShell, kot so Get-Item, Get-ChildItem, Remove-Item itd.

Najprej posodobimo PowerShell. To se naredi enkrat, dva, trikrat.

  1. Ogrodje .NET Framework posodobimo na različico, ki ni nižja od 4.5. Operacijski sistem mora biti vsaj Windows 7 SP1/2008 R2. Lahko prenesete trenutno različico tukaj, preberite več informacij tukaj.
  2. Prenesi in namestite Windows Management Framework 5.1
  3. Ponovno zaženemo stroj.

Pridni ljudje lahko zgoraj opisane korake naredijo ročno, leni pa s pomočjo SCCM, pravilnikov, skript in drugih orodij za avtomatizacijo.

Trenutno različico lupine PowerShell lahko najdete v spremenljivki $PSVersionTable. Po posodobitvi bi moralo izgledati nekako takole:

Windows, PowerShell in dolge poti

Zdaj pri uporabi ukazov cmdlet Get-ChildItem in podobno namesto običajnega Pot bomo uporabili literalPath.

Oblika poti bo nekoliko drugačna:

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

Za udobje pretvorbe poti iz običajnega formata v format literalPath lahko uporabite to funkcijo:

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

Upoštevajte, da pri nastavitvi parametra literalPath Ne morete uporabiti nadomestnih znakov (*, ? in tako naprej).

Poleg parametra literalPath, v posodobljeni različici ukaza cmdlet PowerShell Get-ChildItem dobil parameter Globina, s katerim lahko nastaviš globino gnezdenja za rekurzivno iskanje, sem ga nekajkrat uporabil in bil zadovoljen.

Zdaj vam ni več treba skrbeti, da bo vaš skript PS zašel na dolgi trnovi poti in ne bo mogel videti oddaljenih datotek. Ta pristop mi je na primer zelo pomagal pri pisanju skripta za ponastavitev »začasnega« atributa datotek v mapah DFSR. Toda to je druga zgodba, ki jo bom poskušal povedati v drugem članku. Veselim se vaših zanimivih komentarjev in predlagam, da rešite anketo.

Koristne povezave:
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

V anketi lahko sodelujejo samo registrirani uporabniki. Prijaviti se, prosim.

Je problem dolgih poti za vas aktualen?

  • Da

  • Bilo je relevantno, a že odločeno

  • Moti, vendar ne veliko

  • Nisem razmišljal o tem, zdi se, da vse deluje

  • Št

  • Drugo (navedite v komentarjih)

Glasovalo je 155 uporabnikov. 25 uporabnikov se je vzdržalo.

Vir: www.habr.com

Dodaj komentar