Powershell - Pfadlänge mit mehr als 260 Zeichen
Hallo zusammen,
ich habe bei Frankys Web diesen Code gefunden:
Leider werden Pfade die länger als 260 Zeichen sind nur mit einer Fehlermeldung im log dargestellt aber nicht in der .csv. Außerdem werden Umlaute auch nicht richtig übernommen und mitten im Pfad gibt es dann "?" Kann man da was machen?
ich habe bei Frankys Web diesen Code gefunden:
#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
Leider werden Pfade die länger als 260 Zeichen sind nur mit einer Fehlermeldung im log dargestellt aber nicht in der .csv. Außerdem werden Umlaute auch nicht richtig übernommen und mitten im Pfad gibt es dann "?" Kann man da was machen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 313559
Url: https://administrator.de/contentid/313559
Ausgedruckt am: 04.12.2024 um 08:12 Uhr
11 Kommentare
Neuester Kommentar
Hallo,
jap das mit den 260 Zeichen ist ein ..... Problem.
Es gibt ein workarround public cmd-let was einer geschrieben hatte das das etwas umgeht und anstelle Get-Chulditem robocopy zum ermitteln der Pfade verwendet.
Oder Du schreibst dein eigenes Script um und Verwendest robocopy
robocopy <Quelle> NULL /L /S /NJH /NFL /NJS /NP /FP /NC /NS /XJ /R:0 /W:0
das sind dan die nutwendigen Schalter für robocopy.
Gruß
Chonta
jap das mit den 260 Zeichen ist ein ..... Problem.
Es gibt ein workarround public cmd-let was einer geschrieben hatte das das etwas umgeht und anstelle Get-Chulditem robocopy zum ermitteln der Pfade verwendet.
Oder Du schreibst dein eigenes Script um und Verwendest robocopy
robocopy <Quelle> NULL /L /S /NJH /NFL /NJS /NP /FP /NC /NS /XJ /R:0 /W:0
das sind dan die nutwendigen Schalter für robocopy.
Gruß
Chonta
Get-ChildItem "$Verzeichnis" -recurse
This is the main problem.Long paths are a mess in powershell. The Bug lies in the NET-Framework. MS doesn't fix the most important things anymore, since years!! You can see it in Windows 10, buggy just up to the ceiling.
Regards
Der listet alles auf, ja Du musst dann halt noch richtig mit -match filtrn arbeiten, jeh nachdem was Du suchst.
Oder du verwendest das vorgefertigtie cmdlet was einer schon geschrieben und hochgeladen hat, (google)
robocopy erstellt natürlich erstmal eine gesamtliste, die Schalter im Beispiel sind so gesetzt, das ab der Quelle alles recursiv durchgegangen wird, aber nur Dateien angezeigt werden.
Ist nicht ganz so trivial das ganze, bis MS endlich auf den Trichter kommt und die uralt 260 Zeichen Blockade aufhebt.
Aber hey Outlook 2016 kann keine UTF8 Passwörter im Jahr 2016
Gruß
Chonta
Oder du verwendest das vorgefertigtie cmdlet was einer schon geschrieben und hochgeladen hat, (google)
robocopy erstellt natürlich erstmal eine gesamtliste, die Schalter im Beispiel sind so gesetzt, das ab der Quelle alles recursiv durchgegangen wird, aber nur Dateien angezeigt werden.
Ist nicht ganz so trivial das ganze, bis MS endlich auf den Trichter kommt und die uralt 260 Zeichen Blockade aufhebt.
Aber hey Outlook 2016 kann keine UTF8 Passwörter im Jahr 2016
Gruß
Chonta
$folder = 'D:\Freigaben'
$export = 'D:\export.csv'
$warning = 260
$files = (robocopy $folder "$env:Temp\dummy" /E /ZB /L /NS /NC /NJH /NJS /NDL /r:0 /w:0) -replace '^\s+|\s+$','' | select -Skip 1
$files | ?{$_.length -ge $warning} | select @{n="Path";e={$_}},@{n="Length";e={$_.length}} | sort length -Desc | export-csv $export -delimiter ";" -NoType -Encoding UTF8
Man könnte denen ja nochmal einen Bugreport schreiben...
https://github.com/PowerShell/PowerShell/issues
https://github.com/PowerShell/PowerShell/issues
Zitat von @Bugger:
Danke Uwe, funktioniert echt super - bis auf die Umlaute, die übernimmt er leider noch nicht richtig. Kann man da noch was drehen?
Kann manDanke Uwe, funktioniert echt super - bis auf die Umlaute, die übernimmt er leider noch nicht richtig. Kann man da noch was drehen?
$folder = 'D:\Freigaben'
$export = 'D:\export.csv'
$warning = 260
function ConvertFrom-CP850([string[]]$string){
$cp850 = [System.Text.Encoding]::GetEncoding(850)
$string | %{$cp850.GetString([System.Console]::OutputEncoding.GetBytes($_))}
}
$files = ConvertFrom-CP850 ((robocopy $folder "$env:Temp\dummy" /E /ZB /L /NS /NC /NJH /NJS /NDL /r:0 /w:0) -replace '^\s+|\s+$','' | select -Skip 1)
$files | ?{$_.length -ge $warning} | select @{n="Path";e={$_}},@{n="Length";e={$_.length}} | sort length -Desc | export-csv $export -delimiter ";" -NoType -Encoding UTF8
Auch wenn es schon gelöst wurde..
https://pathlengthchecker.codeplex.com/
https://pathlengthchecker.codeplex.com/