我试图弄清楚如何保持变量$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;保持空洞......
感谢您的帮助。
答案 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! :)