Может ли PowerShell перехватывать ошибки в GetChildItem и продолжать цикл?

У меня есть сценарий PowerShell, который рекурсивно проходит через файловую систему с помощью GetChildItem в цикле for. По мере продвижения он исправляет обнаруженные им проблемы ACL (в основном, когда кто-то заблокировал учетную запись BUILTIN \ Administrators) ... но есть с некоторыми он не может справиться самостоятельно, например, когда я получаю [System.UnauthorizedAccessException], если есть явный ACE "Запретить".

Строка кода выглядит так:

foreach($file in Get-ChildItem $dirRoot -Recurse -ErrorAction Continue) {
    ...
}

Когда он спотыкается путь, который он не может прочитать, дает следующее исключение:

Get-ChildItem: Доступ к пути 'C: \ TEMP \ denied' запрещен. В Fix-ACLs.ps1: 52 символа: 31 + foreach ($ file в Get-ChildItem <<<< $ dirRoot -Recurse -ErrorAction Продолжать) { + CategoryInfo: PermissionDenied: (C: \ TEMP \ denied: String) [Get-ChildItem], исключение неавторизованного доступа + FullyQualifiedErrorId: DirUnauthorizedAccessError, Microsoft.PowerShell.Commands.GetChildItemCommand

Я хотел бы попробовать / отловить или перехватить ошибку, чтобы я мог восстановить ACL (то есть удалить «Запретить») на месте, и - что наиболее важно - -продолжить петлю, не теряя места. Есть какие-нибудь предложения для меня?

7
задан ewall 4 August 2011 в 14:40
поделиться