Windows, PowerShell i dugi putovi

Windows, PowerShell i dugi putovi

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:

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.

  1. 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.
  2. preuzimanje i instalirajte Windows Management Framework 5.1
  3. 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:

Windows, PowerShell i dugi putovi

Sada kada koristite cmdlete Get-ChildItem i slično umjesto uobičajenog Put budemo iskoristiti doslovniPut.

Format staze 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 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.

Korisni linkovi:
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

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Je li problem dugih puteva relevantan za vas?

  • Da

  • Bilo je relevantno, ali već odlučeno

  • Smeta, ali ne puno

  • Nisam razmišljao o tome, čini se da sve radi

  • Ne

  • Ostalo (navedite u komentarima)

Glasovalo je 155 korisnika. Suzdržano je bilo 25 korisnika.

Izvor: www.habr.com

Dodajte komentar