Powershell: Überlange Dateipfade auflisten

Überlange Dateipfade können bei Migrationen und Backup/Restore Prozessen zum Problem werden. Ein Dateipfad darf normalerweise nicht länger als 260 Zeichen sein. Es kommt allerdings vor das diese Grenze überschritten wird. Um solche langen Pfade zu identifizieren lässt sich dieses kleine Powershell Script verwenden:

#Zu prüfendes Verzeichnis oder Volume:
$Verzeichnis = „D:\Freigaben“

#Pfad zur CSV-Datei für den Export:
$CSV = „d:\export.csv“

#Warnstufe für Pfade über XX Zeichen Laenge in CSV schreiben
$Warninglevel = „250“

#———————————————–
„Pfad;Laenge“ | set-content „$CSV“
$dirlist = Get-ChildItem „$Verzeichnis“ -recurse | foreach {$_.Fullname}
foreach ($dir in $dirlist)
{
$a = $dir | Measure-Object  -Character
$length = $a.characters

if ($length -gt $Warninglevel)
{
„$dir;$length“ | add-content „$CSV“
}
}
$sort = import-csv „$CSV“  -delimiter „;“ | Sort-Object -Property Laenge -Descending
„“ | set-content „$CSV“
$sort | export-csv „$CSV“ -delimiter „;“ –NoTypeInformation

Das Script durchsucht ein Verzeichnis oder ein Volume und speichert die zu langen Pfade in einer CSV Datei ab.

Hier noch ein paar Hintergrundinformationen: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx

2 Kommentare zu “Powershell: Überlange Dateipfade auflisten”

  1. Hallo Frank,
    ja, das ist schon ein riesen Problem.
    Dein Script macht aber einen Denkfehler.
    Die tatsächliche Länge des Pfades setzt sich aus der Länge des UNC Pfades, also mit Backslashes, Servername,Volumename, zusammen.

    Trotzdem danke,
    Gruß
    Volker

  2. Hallo,

    das Script liefert mir „nur“ Dateienamen, die kleiner als 260 Zeichen sind.

    Leider bekomme ich viele Gci Fehlermeldungen das der Pfad zu lang ist. Die Dateien über 260 Zeichen werden also nicht protokolliert -> aber genau darum geht es doch, oder?

    OS: Server2012

    Thx im voraus
    Daniel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.