Powershell перехватывает нескончаемые ошибки WITH SilentlyContinue

Я хотел бы отлавливать и обрабатывать не прекращающиеся ошибки, но используя -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)

1 ответ

Решение

Вы не можете использовать Try/Catch с ErrorAction SilentlyContinue. Если вы хотите обрабатывать ошибки в режиме без вывода сообщений, используйте Stop для ErrorAction, а затем используйте ключевое слово Continue в блоке Catch, что позволит продолжить цикл со следующим входным объектом:

$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)
Другие вопросы по тегам