У меня есть сценарий 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 </p>
Я хотел бы попытаться / поймать или перехватить ошибку, чтобы я мог восстановить ACL (то есть удалить «Запретить») на месте и, что самое важное, продолжить цикл, не теряя своего места. Любые предложения для меня?