Windows, PowerShell en lange paden

Windows, PowerShell en lange paden

Ik denk dat jij, net als ik, dit soort paden meer dan eens hebt gezien !!! Belangrijk____Nieuw____!!! Niet verwijderen!Bestelnr. 98819-649-B gedateerd 30 februari 1985 over de benoeming van Ivan Aleksandrovich Kozlov als tijdelijk waarnemend hoofd van de afdeling voor het ondersteunen van zakelijke VIP-klanten en het organiseren van zakelijke bijeenkomsten aan de zijlijn.doc.

En vaak kun je zo’n document niet meteen in Windows openen. Sommige mensen oefenen met een oplossing in de vorm van schijftoewijzing, anderen gebruiken bestandsbeheerders die met lange paden kunnen werken: Far Manager, Total Commander en dergelijke. En nog veel meer keken met droefheid toe hoe het PS-script dat ze creëerden, waarin veel werk was geïnvesteerd en dat met een knal werkte in de testomgeving, in een productieomgeving hulpeloos klaagde over een onmogelijke taak: Het opgegeven pad, de bestandsnaam of beide zijn te lang. De volledig gekwalificeerde bestandsnaam moet minder dan 260 tekens lang zijn, en de mapnaam moet minder dan 248 tekens lang zijn.
Het blijkt dat 260 tekens genoeg zijn “niet alleen voor iedereen.” Als u geïnteresseerd bent om verder te gaan dan de grenzen van wat is toegestaan, raadpleeg dan de kat.

Hier zijn slechts enkele van de ongelukkige gevolgen van het beperken van de lengte van het bestandspad:

Ik wijk enigszins af van het onderwerp en merk op dat voor DFS-replicatie het probleem dat in het artikel wordt besproken niet verschrikkelijk is en dat bestanden met lange namen met succes van server naar server reizen (als al het andere natuurlijk is goed gedaan).

Ik zou ook uw aandacht willen vestigen op een zeer nuttig hulpprogramma dat mij meer dan eens heeft geholpen robocopy. Ook is ze niet bang voor lange paden en kan ze veel. Als de taak dus neerkomt op het kopiëren/overbrengen van bestandsgegevens, kunt u daar stoppen. Als je trucjes wilt uithalen met toegangscontrolelijsten voor bestandssystemen (DACL's), kijk dan weg subinacl. Ondanks zijn hoge leeftijd presteerde het uitstekend op Windows 2012 R2. Hier toepassingsmethoden worden overwogen.

Ik was geïnteresseerd in het leren werken met lange PowerShell-paden. Bij hem lijkt het bijna op een bebaarde grap over Ivan Tsarevitsj en Vasilisa de Schone.

Snelle manier

Schakel over naar Linux en maak je geen zorgen over Windows 10/2016/2019 en schakel de juiste groepsbeleidsinstelling in/pas het register aan. Ik zal niet in detail op deze methode ingaan, omdat... Er zijn al veel artikelen over dit onderwerp op internet, bijvoorbeeld dit.

Gezien het feit dat de meeste bedrijven veel, op zijn zachtst gezegd, niet de nieuwste versies van besturingssystemen hebben, is deze methode alleen snel om op papier te schrijven, tenzij je natuurlijk een van die gelukkigen bent die weinig oudere systemen en Windows 10 heeft /2016/2019 regeert.

De lange weg

Laten we hier meteen een voorbehoud maken dat de wijzigingen het gedrag van Windows Explorer niet zullen beïnvloeden, maar het mogelijk zullen maken om lange paden in PowerShell-cmdlets te gebruiken, zoals Get-Item, Get-ChildItem, Remove-Item, enz.

Laten we eerst PowerShell bijwerken. Het is één, twee, drie keer gedaan.

  1. We updaten het .NET Framework naar versie minimaal 4.5. Het besturingssysteem moet minimaal Windows 7 SP1/2008 R2 zijn. U kunt de huidige versie downloaden hier, lees meer informatie hier.
  2. downloaden en installeer Windows Management Framework 5.1
  3. We herstarten de machine.

Hardwerkende mensen kunnen de hierboven beschreven stappen handmatig uitvoeren, luie mensen kunnen het doen met behulp van SCCM, beleid, scripts en andere automatiseringstools.

De huidige versie van PowerShell kunt u vinden in de variabele $PSVersionTabel. Na de update zou het er ongeveer zo uit moeten zien:

Windows, PowerShell en lange paden

Nu bij gebruik van cmdlets Get-ChildItem en dergelijke in plaats van het gebruikelijke Pad ем использовать letterlijk Pad.

Het padformaat zal enigszins afwijken:

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

Voor het gemak van het converteren van paden van het gebruikelijke formaat naar het formaat letterlijk Pad je kunt deze functie gebruiken:

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"}
}

Houd er rekening mee dat u bij het instellen van de parameter letterlijk Pad U kunt geen jokertekens gebruiken (*, ? en zo verder).

Naast de parameter letterlijk Pad, in de bijgewerkte versie van PowerShell-cmdlet Get-ChildItem heb de parameter Diepte, waarmee je de nestdiepte voor recursief zoeken kunt instellen, heb ik een paar keer gebruikt en was tevreden.

Nu hoef je je geen zorgen te maken dat je PS-script op het lange, netelige pad op een dwaalspoor terechtkomt en verre bestanden niet meer kan zien. Deze aanpak heeft me bijvoorbeeld veel geholpen bij het schrijven van een script om het ‘tijdelijke’ attribuut van bestanden in DFSR-mappen opnieuw in te stellen. Maar dat is een ander verhaal, dat ik in een ander artikel zal proberen te vertellen. Ik kijk uit naar interessante reacties van u en stel voor dat u deelneemt aan de enquête.

Nuttige links:
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

Alleen geregistreerde gebruikers kunnen deelnemen aan het onderzoek. Inloggen, Alsjeblieft.

Is het probleem van lange paden relevant voor u?

  • Ja

  • Was relevant, maar al besloten

  • Het interfereert, maar niet veel

  • Ik heb er niet over nagedacht, alles lijkt te werken

  • Geen

  • Anders (geef dit aan bij opmerkingen)

155 gebruikers hebben gestemd. 25 gebruikers onthielden zich van stemming.

Bron: www.habr.com

Voeg een reactie