Mislim, da ste tudi vi že večkrat naleteli na poti, kot je ta !!! Pomembno____Novo____!!! Ne briši!!! Odlok št. 98819-649-B z dne 30. februarja 1985 o imenovanju Ivana Aleksandroviča Kozlova za začasnega izvajalca dolžnosti vodje oddelka za spremljanje korporativnih VIP-strank in organizacijo poslovnih srečanj v zakulisju.doc.
In pogosto takega dokumenta v Windowsih takoj ne morete odpreti. Nekateri uporabljajo rešitev, kot je mapiranje pogonov, nekateri uporabljajo upravljavce datotek, ki znajo delati z dolgimi potmi: Far Manager, Total Commander in podobne. Še mnogi so obžalovali, kako je njihov PS-skript, v katerega je bilo vloženega veliko truda in ki je v testnem okolju deloval odlično, v produkcijskem okolju nesposobno obupaval nad neobvladljivo nalogo: Določen pot, ime datoteke ali oboje je predolgo. Polno kvalificirano ime datoteke mora biti krajše od 260 znakov, ime direktorija pa krajše od 248 znakov.
Kot se je izkazalo, 260 znakov ni dovolj za "vse“. Če vas zanima priti izven dovoljenega - prosim, preberite naprej.
Tukaj je le nekaj obžalovanja vrednih posledic omejitve dolžine datotečne poti:
- na strežniku je mapa, na primer, D:DataSharedAccounting, ki je deljena preko SMB in se priključi uporabnikom kot omrežni disk S; uporabniki ustvarjajo datoteke, ki jih upravniki/skripte ne morejo prebrati pri lokalnem dostopu na strežnik, ker je absolutna pot daljša od omrežne;
- ;
- ;
- pri migraciji podatkov iz drugih sistemov, v katerih so omejitve dolžine poti manj stroge, bo v novem okolju del teh podatkov nedostopen brez dodatnih prizadevanj;
- ;
- itd…
Malce odmikajoč od teme, naj opozorim, da za DFS replikacijo obravnavana težava v članku ni problematična in datoteke z dolgimi imeni uspešno potujejo s strežnika na strežnik (če ste, seveda, vse ostalo ).
Želel bi tudi opozoriti na zelo koristno orodje , katerega dolge poti prav tako ne prizadenejo, hkrati pa zmore marsikaj. Zato, če je naloga kopiranje/premik podatkovnih datotek, se lahko osredotočite na to. Če morate dodelati seznam nadzor dostopa v datotečnem sistemu (DACL), poglejte v smer . Kljub svoji starosti se je odlično izkazala na Windows 2012 R2. raziskane so možnosti uporabe.
Zanimala me je možnost naučiti delati z dolgimi potmi v PowerShellu. Tako je skoraj kot v tistem smešnem vicu o Ivanu Tsareviču in Vasilisi Prelepi.
Hiter način
Preiti na Linux in se ne obremenjevati z Windows 10/2016/2019 ter vključiti ustrezen parameter skupinske politike/popraviti registr. O tem načinu ne bom podrobno razlagal, ker na spletu že obstaja veliko člankov na to temo, na primer, .
Glede na to, da ima v večini podjetij veliko, milo rečeno, zastarelih različic operacijskih sistemov, je ta način hiter le na papirju, razen če niste eden izmed tistih srečnežev, ki ima malo sistemov z zastarelo programsko opremo in prevladujejo Windows 10/2016/2019.
Dolgotrajen način
Tukaj se takoj oglašamo, da spremembe ne bodo vplivale na vedenje raziskovalca Windows, temveč bodo omogočile uporabo dolgih poti v PowerShellovih ukazih, kot so Get-Item, Get-ChildItem, Remove-Item in drugi.
Za začetek posodobimo PowerShell. To je hitro in enostavno.
- Posodabljamo .NET Framework na različico vsaj 4.5. Operacijski sistem mora biti vsaj Windows 7 SP1/2008 R2. Aktualno različico lahko prenesete , dodatne informacije lahko preberete .
- in namestimo Windows Management Framework 5.1
- Znova zagnati stroj.
Delovni lahko ročno izvedejo zgoraj opisane korake, leni pa z uporabo SCCM, politik, skript in drugih sredstev avtomatizacije.
Trenutno različico PowerShell lahko izveste iz spremenljivke $PSVersionTable. Po posodobitvi bi moralo biti približno tako:

Zdaj pri uporabi ukazov Get-ChildItem in podobnih namesto običajnega Pot bomo uporabljali LiteralPath.
Format poti bo pri tem nekoliko drugačen:
Get-ChildItem -LiteralPath "?C:Folder"
Get-ChildItem -LiteralPath "?UNCServerNameShare"
Get-ChildItem -LiteralPath "?UNC192.168.0.10Share"
Za udobnost 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 nastavljanju parametra LiteralPath ne morete uporabljati nadomestnih znakov (*, ? itd.).
Poleg parametra LiteralPath, je v posodobljeni različici PowerShell ukaz Get-ChildItem prejel parameter Depth, s katerim lahko določite globino gnezdenja za rekurzivno iskanje, sam sem ga nekajkrat uporabil in bil zadovoljen.
Sedaj se lahko ne bojite, da se bo vaš PS-skript zmedel na dolgi in zahtevni poti ter ne bo našel oddaljenih datotek. Ta pristop mi je na primer zelo pomagal pri pisanju skripta za odstranitev atributa 'začasno' iz datotek v mapah DFSR. A to je druga zgodba, o kateri bom poskušal spregovoriti v drugem članku. Od vas pričakujem zanimive komentarje in predlagam, da sodelujete v anketi.
izvorna koda
Samo registrovani korisnici mogu učestvovati u anketi. , molim vas.
Ali vas težava dolgih poti še zmeraj moti?
Da
Je bila težava, vendar sem jo že rešil
Motilo me je, vendar ne preveč
Nisem razmišljal o tem, vse deluje
Ne
Drugo (navedite v komentarjih)
Glasovalo je 155 uporabnikov. 25 uporabnikov se je vzdržalo.
Izvor: habr.com
