Jeg tror du, som meg, ofte har sett formenes veier !!! Viktig____Ny____!!! Ikke slett!!! Ordrenummer 98819-649-B datert 30. februar 1985 om utnevnelsen av Ivan Aleksandrovich Kozlov som fungerende leder for avdelingen for å støtte bedriftens VIP-kunder og organisere forretningsmøter på sidelinjen.doc.
Og ofte vil du ikke kunne åpne et slikt dokument i Windows med en gang. Noen praktiserer en løsning i form av diskmapping, noen bruker filbehandlere som kan jobbe med lange baner: Far Manager, Total Commander og lignende. Og mange flere så trist på hvordan PS-manuset de laget, som det ble investert mye arbeid i og som fungerte med et smell i testmiljøet, i kampmiljøet hjelpeløst klaget over en umulig oppgave: Den angitte banen, filnavnet eller begge er for lange. Det fullstendige filnavnet må være mindre enn 260 tegn, og katalognavnet må være mindre enn 248 tegn.
Som det viste seg, er 260 tegn nok "ikke bare for alle." Hvis du er interessert i å gå utover grensene for hva som er tillatt spør jeg under kat.
Her er bare noen av de uheldige konsekvensene av å begrense filbanelengden:
det er en mappe på serveren, for eksempel D:DataSharedAccounting, som deles via SMB og er montert på brukere som en nettverksstasjon S; brukere oppretter filer som administratorer / skript ikke kan lese når de får tilgang lokalt fra serveren, fordi den absolutte banen er lengre enn nettverksbanen;
når du migrerer data fra andre systemer som har mindre strenge restriksjoner på lengden på banen, i det nye miljøet, vil noen av dem bli utilgjengelige uten å danse med en tamburin;
Litt avvikende fra emnet, merker jeg at for DFS-replikering er problemet som vurderes i artikkelen ikke forferdelig, og filer med lange navn lykkes med å reise fra server til server (med mindre, selvfølgelig, ellers du gjort riktig).
Jeg vil også trekke oppmerksomhet til et veldig nyttig verktøy som har hjulpet meg mer enn en gang robocopy. Heller ikke hun er redd for lange veier, og hun kan mye. Derfor, hvis oppgaven handler om å kopiere / overføre fildata, kan du stoppe ved det. Hvis du trenger å rote rundt med filsystemtilgangskontrolllister (DACL), se bort subinakl. Til tross for sin betydelige alder, viste den seg perfekt på Windows 2012 R2. Her påføringsmetoder vurderes.
Jeg var også interessert i å lære å jobbe med lange PowerShell-baner. Med ham, nesten som i en skjeggete vits om Ivan Tsarevich og Vasilisa den vakre.
Rask måte
Bytt til Linux og ikke bekymre deg for Windows 10/2016/2019 og aktiver riktig gruppepolicyinnstilling/registerjustering. Jeg vil ikke dvele ved denne metoden i detalj, fordi. det er allerede mange artikler på nettet om dette emnet, for eksempel, dette.
Med tanke på at det i de fleste selskaper er mange, mildt sagt, ikke ferske versjoner av operativsystemer, er denne metoden rask kun for å skrive på papir, med mindre du selvfølgelig er en av de heldige som har få eldre systemer og Windows 10/2016/2019 regjeringstid .
lang vei
Her tar vi umiddelbart forbehold om at endringene ikke vil påvirke oppførselen til Windows Utforsker, men vil gjøre det mulig å bruke lange baner i PowerShell cmdlets, som Get-Item, Get-ChildItem, Remove-Item, etc.
Først, la oss oppdatere PowerShell. Det er gjort en, to, tre.
Vi oppdaterer .NET Framework til en versjon på minst 4.5. Operativsystemet må være minst Windows 7 SP1/2008 R2. Gjeldende versjon kan lastes ned herles mer informasjon her.
nedlasting og installer Windows Management Framework 5.1
Vi starter maskinen på nytt.
De hardtarbeidende kan gjøre trinnene ovenfor manuelt, de late kan gjøre det ved hjelp av SCCM, policyer, skript og andre automatiseringsverktøy.
Den gjeldende versjonen av PowerShell kan bli funnet fra variabelen $PSVersionTable. Etter oppdateringen skal det se slik ut:
Nå når du bruker cmdlets Get-ChildItem og andre liker ham i stedet for det vanlige Sti vi vil bruke bokstavelig bane.
For enkelhets skyld konvertere stier fra det vanlige formatet til formatet bokstavelig bane du kan bruke denne funksjonen:
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"}
}
Vær oppmerksom på at når du stiller inn parameteren bokstavelig bane jokertegn kan ikke brukes (*, ? og så videre).
I tillegg til parameteren bokstavelig bane, i den oppdaterte PowerShell-cmdleten Get-ChildItem mottatt parameter Dybde, som du kan stille inn hekkedybden for rekursivt søk med, jeg brukte den et par ganger og var fornøyd.
Nå kan du ikke være redd for at PS-skriptet ditt kommer på avveie fra en lang tornet vei og ikke vil se fjerne filer. For eksempel hjalp denne tilnærmingen meg mye når jeg skrev et skript for å tilbakestille det "midlertidige" attributtet for filer i DFSR-mapper. Men dette er en annen historie, som jeg skal prøve å fortelle i en annen artikkel. Jeg venter på interessante kommentarer fra deg, og jeg foreslår at du tar en undersøkelse.