Я наконец нашел решение сам. В этом скрипте я использую модуль NTFSSecurity (https://github.com/raandree/NTFSSecurity) для управления списками ACL и наследованием. По сети это кажется немного медленным.
Перед фрагментом кода, который я поделился выше, у меня есть несколько строк, которые проверяют и обновляют кучу ACL по сети. Поскольку это занимает некоторое время, ошибки возникают только через некоторое время. В этом случае, если команда обнаруживает ошибку, она просто продолжается, но не отображает и не перехватывает ошибку одновременно.
Я использовал ошибки для обнаружения элементов, к которым мне пришлось восстановить доступ. Теперь я использую другой командлет, поставляемый с модулем NTFSSecurity, Get-NTFSEffectiveAccess. Я написал небольшую функцию, которая отлично справляется с этой задачей:
Function Check-MyAccess([String]$Path)
{
# Get effective permissions
$effectiveAccess = Get-NTFSEffectiveAccess -Path $Path -ErrorAction SilentlyContinue
# Check to be, at least, able to read the item
If(($effectiveAccess -eq $Null) -or ($effectiveAccess.AccessRights -Match 'Synchronize') -or ((($effectiveAccess.AccessRights -Like '*Read*') -or ($effectiveAccess.AccessRights -Like '*Modify*') -and ($effectiveAccess.AccessControlType -Match 'Deny'))))
{
Return $False
}
Else
{
Return $True
}
}