PowerShell从`$ Error`中删除特定错误

时间:2014-12-04 09:19:57

标签: powershell error-handling

我试图弄清楚如何保持变量$Error不受System.IO.PathTooLongException例外影响,但仍会在ArrayList中收集这些长路径供以后使用。

示例:

$LongPath1 = "\\domain.net\bnl\Other stuff\DEPARTMENTS\SITE\Administration\Plant\Securite\Bien etre\Bien etre\Bien-être au travail\Travaux de fin d'année\Other-Stuff"
$LongPath2 = "\\domain.net\bnl\Other stuff\DEPARTMENTS\SITE\Administration\Plant\Laboratoire\Sauvegarde PC\Bibliothèques\Documents\Sauvegarde dossier Labo\Laboratoire (sauvegarde 03-2014)\Laboratoire\Travaux en cours"

Get-ChildItem -Recurse -LiteralPath $LongPath1 -ErrorVariable e -ErrorAction SilentlyContinue
Get-ChildItem -Recurse -LiteralPath $LongPath2 -ErrorVariable +e -ErrorAction SilentlyContinue

$PathTooLong = New-Object System.Collections.ArrayList($null)

$e | where {$_.Exception -like 'System.IO.PathTooLongException*'} | ForEach {
    $PathTooLong.Add($_.TargetObject) | Out-Null
}

$PathTooLong

如何删除存储在ErrorVariable' e'中的完全相同的错误?对于自动生成的$Error变量的长路径?

尝试:

Get-ChildItem -Recurse -LiteralPath $LongPath1 -ErrorVariable e -ErrorAction Ignore

我认为天才是使用Ignore选项,因此$Error变量不会自动填充,但ErrorVariable' e&# 39;保持空洞......

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

显然它比我最初想的要简单得多。这是我找到的答案:

$LongPath1 = "\\domain.net\bnl\Other stuff\DEPARTMENTS\SITE\Administration\Plant\Securite\Bien etre\Bien etre\Bien-être au travail\Travaux de fin d'année\Other-Stuff"
$LongPath2 = "\\domain.net\bnl\Other stuff\DEPARTMENTS\SITE\Administration\Plant\Laboratoire\Sauvegarde PC\Bibliothèques\Documents\Sauvegarde dossier Labo\Laboratoire (sauvegarde 03-2014)\Laboratoire\Travaux en cours"

Get-ChildItem -Recurse -LiteralPath $LongPath1 -ErrorVariable e -ErrorAction SilentlyContinue
Get-ChildItem -Recurse -LiteralPath $LongPath2 -ErrorVariable +e -ErrorAction SilentlyContinue

$PathTooLong = New-Object System.Collections.ArrayList($null)

$e | where {$_.Exception -like 'System.IO.PathTooLongException*'} | ForEach {
    $PathTooLong.Add($_.TargetObject) | Out-Null
    $Error.Remove($_)
}

$PathTooLong

我可以轻松删除$Error.Remove($_)之类的错误。一定要喜欢PowerShell! :)