Windows, PowerShell und lange Pfade

Windows, PowerShell und lange Pfade

Ich denke, Ihnen ist es genauso wie mir gegangen, dass Sie bereits Wege wie diesen gesehen haben. !!! Wichtig____Neu____!!! Bitte nicht löschen!!! Verordnung №98819-649-Б vom 30. Februar 1985 ĂŒber die Ernennung von Ivan Alexandrovich Kozlov zum vorĂŒbergehenden Leiter der Abteilung fĂŒr die Betreuung von Unternehmens-VIP-Kunden und Organisation von GeschĂ€ftstreffen im Hintergrund.doc.

Und oft lĂ€sst sich ein solches Dokument unter Windows nicht sofort öffnen. Einige nutzen Umgehungsmethoden wie das Mappen von Laufwerken, andere verwenden Dateimanager, die mit langen Pfaden umgehen können: Far Manager, Total Commander und Ă€hnliche. Viele haben auch betrĂŒbt beobachtet, wie ihr PS-Skript, in das viel Arbeit investiert wurde und das in der Testumgebung hervorragend funktionierte, in der Produktionsumgebung hilflos ĂŒber die unlösbare Aufgabe klagte: Der angegebene Pfad, Dateiname oder beides sind zu lang. Der vollqualifizierte Dateiname muss weniger als 260 Zeichen und der Verzeichnisname weniger als 248 Zeichen betragen.
Wie sich herausstellte, sind 260 Zeichen nicht fĂŒr „alle“ ausreichend. Wenn Sie daran interessiert sind, die zulĂ€ssigen Grenzen zu ĂŒberschreiten – bitte nach dem Cut.

Hier sind nur einige der traurigen Folgen der Begrenzung der LĂ€nge von Dateipfaden:

Etwas vom Thema abweichend möchte ich anmerken, dass fĂŒr DFS-Replikation das in diesem Artikel betrachtete Problem nicht entscheidend ist und Dateien mit langen Namen erfolgreich von Server zu Server reisen (sofern Sie ansonsten alles richtig gemacht haben) haben Sie alles richtig gemacht).

Ich möchte außerdem auf ein sehr nĂŒtzliches Tool hinweisen, das mir mehrfach geholfen hat robocopy. Auch es fĂŒrchtet sich nicht vor langen Pfaden und kann viel. Daher kann man, wenn die Aufgabe darin besteht, Daten zu kopieren/verschieben, sich dafĂŒr entscheiden. Wenn es darum geht, mit Zugriffssteuerungslisten im Dateisystem (DACL) zu arbeiten, schauen Sie in Richtung subinacl. Trotz ihres stattlichen Alters hat sie sich unter Windows 2012 R2 hervorragend bewĂ€hrt. Hier Es wurden Anwendungsmöglichkeiten untersucht.

Ich war allerdings gespannt darauf, PowerShell im Umgang mit langen Pfaden beizubringen. Es ist fast so wie in dem alten Witz ĂŒber Iwan-Zarewitsch und Wasilissa die Wunderschöne.

Schnelle Methode

Wechseln Sie zu Linux und machen Sie sich keine Gedanken ĂŒber Windows 10/2016/2019 und aktivieren Sie die entsprechende Gruppenrichtlinieneinstellung oder optimieren Sie die Registrierung. Ich werde nicht ausfĂŒhrlich auf diese Methode eingehen, da es bereits viele Artikel zu diesem Thema im Netz gibt, zum Beispiel, dies.

Angesichts der Tatsache, dass in den meisten Unternehmen viele, milde gesagt, veraltete Versionen von Betriebssystemen vorhanden sind, ist diese Methode nur auf dem Papier schnell, es sei denn, Sie gehören zu den glĂŒcklichen Personen, die nur wenige Altsysteme haben und mit Windows 10/2016/2019 arbeiten.

Lange Methode

Hier sei gleich klargestellt, dass die Änderungen das Verhalten des Windows-Explorers nicht beeintrĂ€chtigen werden, sondern die Verwendung von langen Pfaden in PowerShell-Cmdlets wie Get-Item, Get-ChildItem, Remove-Item usw. ermöglichen.

ZunÀchst aktualisieren wir PowerShell. Dies ist im Handumdrehen erledigt.

  1. Wir aktualisieren das .NET Framework auf mindestens Version 4.5. Das Betriebssystem sollte mindestens Windows 7 SP1/2008 R2 sein. Die aktuelle Version kann heruntergeladen werden hier, weitere Informationen können gelesen werden hier.
  2. Wir laden herunter und installieren das Windows Management Framework 5.1
  3. Wir starten den Computer neu.

Fleißige Personen können die oben beschriebenen Schritte manuell durchfĂŒhren, wĂ€hrend die Faulen dies mit Hilfe von SCCM, Richtlinien, Skripten und anderen Automatisierungsmitteln erledigen können.

Die aktuelle Version von PowerShell kann aus der Variable $PSVersionTableabgerufen werden. Nach dem Update sollte es ungefÀhr so aussehen:

Windows, PowerShell und lange Pfade

Jetzt können Sie beim Verwenden von Cmdlets Get-ChildItem und Àhnlichen statt des gewohnten Pfad verwenden LiteralPath.

Das Format der Pfade wird dabei etwas anders sein:

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

Zur besseren Umwandlung von Pfaden aus dem gewohnten Format in das Format LiteralPath kann folgende Funktion verwendet werden:

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

Bitte beachten Sie, dass beim Festlegen des Parameters LiteralPath Wildcard-Zeichen nicht verwendet werden dĂŒrfen (*, ? usw.).

Neben dem Parameter LiteralPath, hat das aktualisierte PowerShell-Cmdlet Get-ChildItem den Parameter Depth, mit dem die Tiefe fĂŒr die rekursive Suche festgelegt werden kann, den ich ein paar Mal verwendet habe und mit dem ich sehr zufrieden war.

Jetzt mĂŒssen Sie keine Angst mehr haben, dass Ihr PS-Skript von seinem langen, steinigen Weg abkommt und die weit entfernten Dateien nicht erkennt. Mich hat dieser Ansatz zum Beispiel sehr unterstĂŒtzt, als ich ein Skript zum ZurĂŒcksetzen des Attributs "vorĂŒbergehend" bei Dateien in DFSR-Ordnern schrieb. Aber das ist eine andere Geschichte, ĂŒber die ich in einem anderen Artikel zu berichten versuchen werde. Ich freue mich auf interessante Kommentare von Ihnen und lade Sie ein, an der Umfrage teilzunehmen.

NĂŒtzliche 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

Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte einloggen.

Ist das Problem der langen Pfade fĂŒr Sie relevant?

  • Ja

  • War relevant, habe es aber bereits gelöst

  • Stört, aber nicht erheblich

  • Habe nicht darĂŒber nachgedacht, scheint alles zu funktionieren

  • Nein

  • Andere (bitte in den Kommentaren angeben)

155 Benutzer haben abgestimmt. 25 Benutzer haben sich enthalten.

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster