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:
- Auf dem Server gibt es einen Ordner, zum Beispiel D:DataSharedAccounting, der über SMB freigegeben ist und von den Benutzern als Netzlaufwerk S gemountet wird; die Benutzer erstellen Dateien, die die Admins/Skripte beim lokalen Zugriff vom Server aus nicht lesen können, da der absolute Pfad länger als der Netzwerkpfad ist;
- ;
- ;
- Bei der Migration von Daten aus anderen Systemen, in denen weniger strenge Einschränkungen an die Pfadlänge bestehen, wird ein Teil davon in der neuen Umgebung ohne viel Aufwand unzugänglich sein;
- ;
- usw…
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) ).
Ich möchte außerdem auf ein sehr nützliches Tool hinweisen, das mir mehrfach geholfen hat . 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 . Trotz ihres stattlichen Alters hat sie sich unter Windows 2012 R2 hervorragend bewährt. 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, .
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.
- 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 , weitere Informationen können gelesen werden .
- und installieren das Windows Management Framework 5.1
- 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:

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:
Nur registrierte Benutzer können an der Umfrage teilnehmen. .
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
