我正在使用Get-ChildItem -Recurse
搜索目录。我不能保证Get-ChildItem
命中的所有内容都可以访问。我要记录这些失败,但不要使整个Get-ChildItem -Recurse
命令失败。现在我有
Get-ChildItem -Recurse $targetdir -ErrorAction Inquire `
| where { $_.Name -eq $name } `
| foreach {
echo-indented "Found $(hash $_) at $($_.FullName)"
$_
}
有问题的代码是
-ErrorAction Inquire
。如果我做了-ErrorAction Stop
,我将不得不在某个地方放一个try-catch。它必须围绕整个管道,对吗?在这种情况下,无法找到的子项将不会被找到并被写出。那我还能做什么? 最佳答案
对于Get-ChildItem -Recurse
,在这里指定-ErrorAction
并不会真正帮助您。只会导致拒绝访问错误为:
-ErrorAction Stop
),一切都将停止。 (不是您想要的)-ErrorAction Continue
),因为它将继续。 对于日志,使用默认的
-ErrorAction Continue
,所有访问拒绝都记录到$Error
变量中。然后,我们可以解析异常记录以获得所需的信息:#Start by clearing the error variable
$Error.Clear()
#Execute Get-ChildItem with -ErrorAction Continue
ls -Recurse $targetdir -ErrorAction Continue `
| where { $_.Name -EQ $name } `
| foreach {
echo-indented "Found $(hash $_) at $($_.FullName)"
$_
}
#Display objects we got Access Denies on:
$Error | ForEach-Object {
Write-Host $_.TargetObject
}