Ich denke, Sie haben, wie ich, ebenso schon oft mit Pfaden dieser Art zu kämpfen gehabt. !!! Wichtig____Neu____!!! Nicht löschen!!! Anordnung Nr. 98819-649-B 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 die Organisation von Geschäftstreffen im Hintergrund.doc.
Und oft ist es nicht möglich, ein solches Dokument sofort in Windows zu öffnen. Einige praktizieren Workarounds wie das Mappen von Laufwerken, andere nutzen Dateimanager, die mit langen Pfaden umgehen können: Far Manager, Total Commander und ähnliche. Viele haben auch mit Bedauern verfolgt, wie ihr sorgfältig erstelltes PS-Skript, das im Testumfeld hervorragend funktionierte, in der Produktionsumgebung hilflos über die unlösbare Aufgabe klagte: Der angegebene Pfad, Dateiname oder beides sind zu lang. Der vollständig qualifizierte Dateiname muss weniger als 260 Zeichen lang sein, und der Verzeichnisname muss weniger als 248 Zeichen lang sein.
Wie sich herausstellte, genügen 260 Zeichen nicht "für alle gleichermassen". Wenn Sie interessiert sind, die Grenzen des Erlaubten zu überschreiten – bitte weiterlesen.
Hier sind einige der traurigen Folgen der Begrenzung der Dateipfad-Länge:
- Auf dem Server gibt es einen Ordner, zum Beispiel D:DataSharedAccounting, der über SMB freigegeben und den Benutzern als Netzwerk-Laufwerk S gemountet wird; die Benutzer erstellen Dateien, die die Administratoren/Skripte bei lokalem Zugriff vom Server nicht lesen können, da der absolute Pfad länger ist als der Netzwerkpfad.
- ;
- ;
- Bei der Migration von Daten aus anderen Systemen, in denen die Beschränkungen der Pfadlängen weniger streng sind, werden einige davon in der neuen Umgebung ohne viel Aufwand nicht verfügbar sein.
- ;
- usw.…
Um noch ein wenig vom Thema abzuweichen, möchte ich anmerken, dass dieses Problem bei DFS-Replikation in dem Artikel nicht von Bedeutung ist und Dateien mit langen Namen erfolgreich von Server zu Server reisen (vorausgesetzt, Sie haben in anderen Aspekten alles richtig gemacht). ).
Ich möchte auch auf ein sehr hilfreiches und oft nützliches Tool hinweisen. . Auch lange Pfade schrecken sie nicht ab, und sie kann viel. Wenn die Aufgabe also das Kopieren oder Übertragen von Dateien umfasst, könnte sie eine gute Wahl sein. Sollte es notwendig sein, mit den Zugriffskontrolllisten im Dateisystem (DACL) zu arbeiten, schauen Sie in Richtung . Trotz ihres fortgeschrittenen Alters hat sie sich unter Windows 2012 R2 hervorragend bewährt. sind die Anwendungsarten betrachtet worden.
Ich war interessiert daran, PowerShell mit langen Pfaden zu verwalten. Es fühlt sich fast so an, als wäre man in dem alten Witz über Ivan Zar und Vasilisa die Wunderschöne.
Schneller Weg
Wechseln Sie zu Linux und machen Sie sich keine Gedanken über Windows 10/2016/2019, aktivieren Sie den entsprechenden Gruppenrichtlinieneinstellungen / optimieren Sie die Registry. Ich werde nicht näher 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, gelinde gesagt, nicht aktuelle Versionen von Betriebssystemen vorhanden sind, ist dieser Weg auf dem Papier nur schnell, es sei denn, Sie gehören zu den Glücklichen, die wenige Legacy-Systeme haben und wo Windows 10/2016/2019 herrscht.
Langer Weg
Lassen Sie uns gleich klarstellen, dass die Änderungen das Verhalten des Windows-Explorers nicht betreffen werden, sondern die Verwendung langer Pfade in PowerShell-Cmdlets wie Get-Item, Get-ChildItem, Remove-Item und anderen ermöglichen.
Zuerst aktualisieren wir PowerShell. Das geht ganz einfach.
- Wir aktualisieren das .NET Framework auf Version 4.5 oder höher. Das Betriebssystem sollte mindestens Windows 7 SP1/2008 R2 sein. Die aktuelle Version können Sie herunterladen , weitere Informationen können gelesen werden .
- und installieren das Windows Management Framework 5.1.
- Starten Sie den Rechner neu.
Fleißige können die oben beschriebenen Schritte manuell durchführen, Bequeme hingegen – mit Hilfe von SCCM, Richtlinien, Skripten und anderen Automatisierungswerkzeugen.
Die aktuelle Version von PowerShell kann aus der Variablen $PSVersionTableabgerufen werden. Nach dem Update sollte es etwa so aussehen:

Jetzt verwenden wir bei CMDLETS Get-ChildItem und ähnlichen anstelle von Path den Parameter 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 Vereinfachung der Umwandlung von Pfaden aus dem gewohnten Format in das Format LiteralPath. kann diese Funktion verwendet werden:
Funktion ConvertTo-LiteralPath
Param([Parameter(Mandatory=$true, Position=0)][String]$Path)
Wenn ($Path.Substring(0,2) -eq "") {Return ("?UNC" + $Path.Remove(0,1))}
Sonst {Return "?$Path"}
}
Bitte beachten Sie, dass beim Festlegen des Parameters LiteralPath. Wildcard-Zeichen (*, ? usw.) nicht verwendet werden dürfen.
Zusätzlich zum Parameter LiteralPath., hat der aktualisierte PowerShell-Cmdlet Get-ChildItem den Parameter Depth, mit dem Sie die Verschachtelungstiefe für rekursive Suchen festlegen können. Ich habe ihn ein paar Mal verwendet und war sehr zufrieden.
Jetzt können Sie sicher sein, dass Ihr PS-Skript nicht auf einen langen, steinigen Pfad abdriftet und keine weit entfernten Dateien übersieht. Zum Beispiel hat mir dieser Ansatz sehr bei der Erstellung eines Skripts geholfen, um das Attribut "temporär" von Dateien in DFSR-Ordnern zurückzusetzen. Aber das ist eine andere Geschichte, über die ich in einem anderen Artikel berichten möchte. Ich freue mich auf Ihre interessanten Kommentare und lade Sie ein, an der Umfrage teilzunehmen.
Nützliche Links:
Nur registrierte Benutzer können an der Umfrage teilnehmen. Sind Sie an Contour interessiert?
Ist das Problem der langen Pfade für Sie relevant?
Ja
War relevant, aber ich habe es bereits gelöst.
Es stört, aber nicht stark.
Ich 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
