Mislim da ste i vi, poput mene, vidjeli ovakve staze više puta !!! Važno____Novo____!!! Ne brisati!!!Naredba broj 98819-649-B od 30. o imenovanju Ivana Aleksandroviča Kozlova privremenim vršiteljem dužnosti voditelja odjela za podršku korporativnim VIP klijentima i organizaciju poslovnih sastanaka na marginama.doc.
I često nećete moći odmah otvoriti takav dokument u sustavu Windows. Neki ljudi prakticiraju zaobilazno rješenje u obliku mapiranja diska, drugi koriste upravitelje datotekama koji mogu raditi s dugim stazama: Far Manager, Total Commander i slično. I još su mnogi s tugom gledali kako PS skripta koju su izradili, u koju je uloženo puno rada i koja je u testnom okruženju radila s treskom, u produkcijskom okruženju bespomoćno kuka nad nemogućim zadatkom: Navedeni put, naziv datoteke ili oboje su predugi. Potpuno kvalificirani naziv datoteke mora biti kraći od 260 znakova, a naziv direktorija mora biti kraći od 248 znakova.
Ispostavilo se da je 260 znakova dovoljno "ne samo za sve". Ako ste zainteresirani za izlazak izvan granica dopuštenog, obratite se mačku.
Ovdje su samo neke od nesretnih posljedica ograničenja duljine putanje datoteke:
postoji mapa na poslužitelju, na primjer, D:DataSharedAccounting, koja se dijeli putem SMB-a i postavlja korisnicima kao mrežni pogon S; korisnici stvaraju datoteke koje administratori/skripte ne mogu čitati kada im se pristupa lokalno s poslužitelja, jer apsolutni put je duži od mrežnog puta;
prilikom migracije podataka iz drugih sustava koji imaju manje stroga ograničenja duljine staze, u novom okruženju neki od njih će postati nedostupni bez plesa s tamburinom;
Malo odstupajući od teme, napominjem da za replikaciju DFS-a problem o kojem se govori u članku nije strašan i datoteke s dugim nazivima uspješno putuju od poslužitelja do poslužitelja (ako je, naravno, sve ostalo učinjeno kako treba).
Također bih vam želio skrenuti pozornost na vrlo koristan uslužni program koji mi je pomogao više puta Robocopy. Također se ne boji dugih staza, a može puno. Stoga, ako se zadatak svodi na kopiranje/prijenos podataka datoteke, tu možete stati. Ako se trebate igrati s listama kontrole pristupa datotečnom sustavu (DACL), skrenite pogled subinakl. Unatoč poodmaklim godinama, odlično se pokazao na Windows 2012 R2. ovdje razmatraju se načini primjene.
Zanimalo me podučavanje kako raditi s dugim PowerShell stazama. S njim je gotovo kao u bradatom vicu o Ivanu Careviću i Vasilisi Lijepoj.
Brzi način
Prijeđite na Linux i ne brinite o Windowsima 10/2016/2019 i omogućite odgovarajuću postavku pravila grupe/podesite registar. Neću se detaljno zadržavati na ovoj metodi, jer... Na internetu već postoji mnogo članaka o ovoj temi, npr. ovo.
S obzirom da većina tvrtki ima mnogo, blago rečeno, ne najnovijih verzija operativnih sustava, ova metoda je brza samo za pisanje na papiru, osim ako, naravno, niste jedan od onih sretnika koji imaju malo naslijeđenih sustava i Windows 10 /2016/2019 vlada .
Dugi put
Ovdje odmah napravimo rezervaciju da promjene neće utjecati na ponašanje Windows Explorera, ali će omogućiti korištenje dugih staza u PowerShell cmdletima, kao što su Get-Item, Get-ChildItem, Remove-Item itd.
Najprije ažurirajmo PowerShell. Radi se jedan, dva, tri puta.
Ažuriramo .NET Framework na verziju ne nižu od 4.5. Operativni sustav mora biti najmanje Windows 7 SP1/2008 R2. Možete preuzeti trenutnu verziju здесь, pročitajte više informacija ovdje.
preuzimanje i instalirajte Windows Management Framework 5.1
Ponovno pokrećemo stroj.
Vrijedni ljudi mogu napraviti gore opisane korake ručno, lijeni ljudi to mogu učiniti uz pomoć SCCM-a, pravila, skripti i drugih alata za automatizaciju.
Trenutna verzija PowerShell-a može se pronaći iz varijable $PSVersionTable. Nakon ažuriranja trebao bi izgledati otprilike ovako:
Sada kada koristite cmdlete Get-ChildItem i slično umjesto uobičajenog Put budemo iskoristiti doslovniPut.
Za praktičnost pretvaranja staza iz uobičajenog formata u format doslovniPut možete koristiti ovu funkciju:
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"}
}
Imajte na umu da prilikom postavljanja parametra doslovniPut Ne možete koristiti zamjenske znakove (*, ? i tako dalje).
Osim parametra doslovniPut, u ažuriranoj verziji PowerShell cmdlet Get-ChildItem dobio parametar Dubina, s kojim možete postaviti dubinu ugniježđivanja za rekurzivno pretraživanje, koristio sam ga par puta i bio sam zadovoljan.
Sada se ne morate brinuti da će vaša PS skripta zalutati na dugom trnovitom putu i da neće moći vidjeti udaljene datoteke. Na primjer, ovaj mi je pristup puno pomogao pri pisanju skripte za poništavanje "privremenog" atributa datoteka u DFSR mapama. Ali to je druga priča koju ću pokušati ispričati u drugom članku. Veselim se vašim zanimljivim komentarima i predlažem da ispunite anketu.