Powershell Get-ChildItem Errorhandling ohne Stop
Hallo zusammen
ich bastle mir zZ ein kleines Script bei dem ich rekursiv durch alle Ordner eines Shares loope.
Jetzt habe ich das Problem, das hier Ordnerlängen > 255 Zeichen existieren.
Mache ich ein GCI, sagt dieses, das ein Ordner mit > 255 Zeichen nicht existieren würde.
Kein Problem, ignoriere ich diesen Ordner halt.
Dazu würde ich gerne einfach den Ordner Loggen und im Script weiter machen.
Jetzt das Problem:
Mein Script wäre
Hier catched er zwar korrekt den Fehler, Stoppt danach aber das Script.
Ich würde aber gerne den fehler catchen, loggen und danach weiter machen.
Mit Continue erhalte ich zwar eine Exception Meldung, aber diese landet nicht im Catch ...
Hat jemand eine Idee ?
Gruß Sea
(und: Es gab hier doch mal eine Powershell Sektion? Warum finde ich die nicht in der Auswahl?)
ich bastle mir zZ ein kleines Script bei dem ich rekursiv durch alle Ordner eines Shares loope.
Jetzt habe ich das Problem, das hier Ordnerlängen > 255 Zeichen existieren.
Mache ich ein GCI, sagt dieses, das ein Ordner mit > 255 Zeichen nicht existieren würde.
Kein Problem, ignoriere ich diesen Ordner halt.
Dazu würde ich gerne einfach den Ordner Loggen und im Script weiter machen.
Jetzt das Problem:
Mein Script wäre
Get-ChildItem -path $path -Recurse -Directory -Force -ErrorAction Stop -Verbose -ErrorVariable err |
ForEach-Object {
#Tu Dinge
}
}catch [System.IO.DirectoryNotFoundException]{
Write-Host "Fehler..." -Foregroundcolor Red
}
Ich würde aber gerne den fehler catchen, loggen und danach weiter machen.
Mit Continue erhalte ich zwar eine Exception Meldung, aber diese landet nicht im Catch ...
Hat jemand eine Idee ?
Gruß Sea
(und: Es gab hier doch mal eine Powershell Sektion? Warum finde ich die nicht in der Auswahl?)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 500105
Url: https://administrator.de/forum/powershell-get-childitem-errorhandling-ohne-stop-500105.html
Ausgedruckt am: 22.12.2024 um 03:12 Uhr
10 Kommentare
Neuester Kommentar
Kein Problem, ignoriere ich diesen Ordner halt.
Muss man nicht, einfach die entsprechende Syntax verwenden und schon gehen auch Pfade > 255 gci "\\?\D:\longpath" -Recurse -Directory -Force
Aber unabhängig davon interessiert mich die Problematik selbst und wie ich das in PS lösen kann
Sogci "D:\longpath" -Recurse -Dir -ErrorVariable err -EA Continue | %{
# do something
}
if ($err){
write-host "Ordner mit Fehlern:" -F Yellow
$err.TargetObject
}
Doch.
Durchlaufe $err einfach mit einer Foreach-Schleife und prüfe die CategoryInfo.Reason
$err | gm *
Das würde generell alle Fehler betreffen. Wenn ich aber z.B kein Zugriff wegen fehlender Berechtigung habe, dann schlägt das da auch auf.
Und in dem Script geht es explizit darum diese fehlenden Berechtigungen zu finden und zu korrigieren.
ich muss also wissen ob es ein DirectoryNotFound oder PermissionDenied ist
Das ist doch einfach $err enthält alle nötigen Properties.Und in dem Script geht es explizit darum diese fehlenden Berechtigungen zu finden und zu korrigieren.
ich muss also wissen ob es ein DirectoryNotFound oder PermissionDenied ist
Durchlaufe $err einfach mit einer Foreach-Schleife und prüfe die CategoryInfo.Reason
$err | gm *
$err | ?{$_.CategoryInfo.Reason -eq 'UnauthorizedAccessException'} | select -Expand TargetObject
Zitat von @emeriks:
Nicht nötig ich nutzte hier ja nicht die besondere PS Variable $Error. Bei diesem Beispiel wird die $err Variable ja jedes mal neu erstellt.Zitat von @141320:
Das ist doch einfach $err enthält alle nötigen Properties.
Durchlaufe $err einfach mit einer Foreach-Schleife und prüfe die CategoryInfo.Reason
$err | gm *
Ja, aber dann vor dem Get-ChildiItem nicht das $err.clear() vergessen! Das ist doch einfach $err enthält alle nötigen Properties.
Durchlaufe $err einfach mit einer Foreach-Schleife und prüfe die CategoryInfo.Reason
$err | gm *
Ich hatte vor einer Weile einen Tipp mit dem man auch längere Pfade mit PS ansprechen kann:
Mit Pfaden über 260 zeichen in powershell arbeiten
Ansonsten evtl. die error action auf continue setzen, und die fehler alle mit
2>
umleiten in eine variable, und später dann auswerten
edit: mit error variable natürlich die viel elegantere antwort - ich sollte aufhören superlangsam auf dem handy zu schreiben
Mit Pfaden über 260 zeichen in powershell arbeiten
Ansonsten evtl. die error action auf continue setzen, und die fehler alle mit
2>
umleiten in eine variable, und später dann auswerten
edit: mit error variable natürlich die viel elegantere antwort - ich sollte aufhören superlangsam auf dem handy zu schreiben
Oder man aktiviert sich zus. lange Pfade.
How to enable paths longer than 260 characters in Windows 10
Aber ihm gings ja offensichtlich primär um die AccessException Fehler
How to enable paths longer than 260 characters in Windows 10
Aber ihm gings ja offensichtlich primär um die AccessException Fehler