Windows, PowerShell i duge staze

Windows, PowerShell i duge staze

Mislim da ste i vi, kao i ja, često viđali staze forme !!! Važno____Novo____!!! Ne brisati!!!Naredba br.98819-649-B od 30. o imenovanju Ivana Aleksandroviča Kozlova za vd šefa odjela za podršku korporativnim VIP klijentima i organizovanje poslovnih sastanaka na marginama.doc.

I često nećete moći odmah otvoriti takav dokument u Windowsu. Neko praktikuje zaobilazno rešenje u vidu mapiranja diska, neko koristi fajl menadžere koji mogu da rade sa dugim putevima: Far Manager, Total Commander i slično. I mnogi su sa tugom gledali kako se PS skripta koju su kreirali, u koju je uloženo mnogo truda i koja je u testnom okruženju, u borbenom okruženju radila sa praskom, bespomoćno žalila na nemoguć zadatak: Navedena staza, ime datoteke ili oboje su predugački. Potpuno kvalificirano ime datoteke mora biti manje od 260 znakova, a ime direktorija mora biti manje od 248 znakova.
Kako se ispostavilo, 260 karaktera je dovoljno "ne samo za sve". Ako ste zainteresovani da pređete granice dozvoljenog, pitam pod kat.

Evo samo nekoliko nesretnih posljedica ograničavanja dužine putanje datoteke:

Malo odstupajući od teme, napominjem da za DFS replikaciju problem koji se razmatra u članku nije strašan i datoteke sa dugim imenima uspješno putuju od servera do servera (osim, naravno, u suprotnom urađeno kako treba).

Također bih želio skrenuti pažnju na jedan vrlo koristan uslužni program koji mi je pomogao više puta robokopija. Ni ona se ne boji dugih puteva, a zna mnogo. Stoga, ako se zadatak svodi na kopiranje / prijenos podataka datoteke, možete se zaustaviti na tome. Ako treba da se petljate sa listama za kontrolu pristupa sistemu datoteka (DACL), skrenete pogled subinacl. Uprkos priličnoj starosti, savršeno se pokazao na Windows 2012 R2. ovdje razmatraju se načini primene.

Takođe me zanimalo da naučim kako da radim sa dugim PowerShell putanjama. S njim, gotovo kao u bradatoj šali o Ivanu Careviču i Vasilisi Lijepoj.

Brzi put

Prebacite se na Linux i ne brinite za Windows 10/2016/2019 i omogućite odgovarajuću postavku grupne politike/podešavanje registra. Neću se detaljnije zadržavati na ovoj metodi, jer. na netu već ima mnogo članaka na ovu temu, npr. ovo.

S obzirom da u većini kompanija postoji mnogo, blago rečeno, ne svježih verzija operativnih sistema, ova metoda je brza samo za pisanje na papiru, osim ako, naravno, niste jedan od onih sretnika koji imaju malo naslijeđenih sistema i Windowsa. 10/2016/2019 vladavina .

dug put

Ovdje odmah rezervišemo 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.

Prvo, ažurirajmo PowerShell. Urađeno je jedan, dva, tri.

  1. Ažuriramo .NET Framework na verziju od najmanje 4.5. Operativni sistem mora biti najmanje Windows 7 SP1/2008 R2. Trenutna verzija se može preuzeti ovdjepročitajte više informacija ovdje.
  2. Preuzimanje i instalirajte Windows Management Framework 5.1
  3. Ponovo pokrećemo mašinu.

Vrijedni mogu gore navedene korake uraditi ručno, a lijeni uz pomoć SCCM-a, politika, skripti i drugih alata za automatizaciju.

Trenutna verzija PowerShell-a može se pronaći iz varijable $PSVersionTable. Nakon ažuriranja to bi trebalo izgledati ovako:

Windows, PowerShell i duge staze

Sada kada koristite cmdlete Get-ChildItem i drugi poput njega umjesto uobičajenog put budemo iskoristiti literalPath.

Format staza bit će malo drugačiji:

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

Za praktičnost pretvaranja staza iz uobičajenog formata u format literalPath 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 literalPath zamjenski znakovi se ne mogu koristiti (*, ? i tako dalje).

Pored parametra literalPath, u ažuriranom PowerShell cmdletu Get-ChildItem primljeni parametar dubina, sa kojim možete podesiti dubinu gniježđenja za rekurzivno pretraživanje, koristio sam ga nekoliko puta i bio sam zadovoljan.

Sada se ne možete bojati da će vaša PS-skripta skrenuti s dugog trnovitog puta i da neće vidjeti udaljene datoteke. Na primjer, ovaj pristup mi je mnogo pomogao pri pisanju skripte za resetiranje „privremenog“ atributa za datoteke u DFSR folderima. Ali ovo je druga priča, koju ću pokušati ispričati u drugom članku. Čekam vaše zanimljive komentare i predlažem da popunite anketu.

Korisni linkovi:
docs.microsoft.com/en-us/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

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Da li je problem dugih puteva relevantan za vas?

  • Da

  • Bilo je relevantno, ali već odlučeno

  • Ometa, ali ne mnogo

  • Nisam razmišljao o tome, izgleda da sve radi

  • Nijedan

  • Ostalo (navedite u komentarima)

Glasalo je 155 korisnika. Uzdržano je bilo 25 korisnika.

izvor: www.habr.com

Dodajte komentar