5

我想捕捉和处理非终止错误,但使用 -ErrorAction SilentlyContiune。我知道我需要使用 -ErrorAction Stop 来捕获非终止错误。该方法的问题是我不希望 try 脚本块中的代码实际停止。我希望它继续但处理非终止错误。我也希望它保持沉默。这可能吗?也许我会以错误的方式解决这个问题。

我想处理的一个非终止错误示例是从 Get-Childitem 对关键字文件夹的访问被拒绝错误。这是一个示例。

$getPST = Get-ChildItem C:\ -Recurse -File -Filter "*.PST" 
$pstSize = @()
Foreach ($pst in $getPST)
{
     If((Get-Acl $pst.FullName).Owner -like "*$ENV:USERNAME")
     {
         $pstSum = $pst | Measure-Object -Property Length -Sum      
         $size = "{0:N2}" -f ($pstSum.Sum / 1Kb)
         $pstSize += $size
     }
}
$totalSize = "{0:N2}" -f (($pstSize | Measure-Object -Sum).Sum / 1Kb)
4

1 回答 1

4

您不能将 Try/Catch 与 ErrorAction SilentlyContinue 一起使用。如果您想静默处理错误,请为您的 ErrorAction 使用 Stop,然后在 Catch 块中使用 Continue 关键字,这将使其使用下一个输入对象继续循环:

$getPST = Get-ChildItem C:\ -Recurse -File -Filter "*.PST" 
$pstSize = @()
Foreach ($pst in $getPST)
{
 Try {
      If((Get-Acl $pst.FullName -ErrorAction Stop).Owner -like "*$ENV:USERNAME")
       {
        $pstSum = $pst | Measure-Object -Property Length -Sum      
        $size = "{0:N2}" -f ($pstSum.Sum / 1Kb)
        $pstSize += $size
       }
     }

 Catch {Continue}
}
$totalSize = "{0:N2}" -f (($pstSize | Measure-Object -Sum).Sum / 1Kb)
于 2013-10-23T22:23:24.910 回答