После унаследованных рабочих книг дошло дело до унаследованных скриптов PowerShell, и там нашёлся старый знакомый в новом пальто. -ErrorAction SilentlyContinue на половине вызовов командлетов, 2>$null на остальных (видимо, на всякий случай).

Хуже, чем кажется, это становится рядом с try и catch. catch видит только завершающие ошибки, а большинство сбоев командлетов незавершающие, так что try вокруг Get-Item на несуществующем пути ничего не ловит, если у вызова нет -ErrorAction Stop. Люди добавляют SilentlyContinue, чтобы убрать красный текст, оборачивают всё в try и считают, что защищены. (Защищены примерно так, как дыра в полу защищена брезентом.)

Внешние программы - отдельная дыра. $ErrorActionPreference по умолчанию вообще не смотрит на их коды выхода, поэтому либо проверяете $LASTEXITCODE сами, либо в 7.4 и новее включаете $PSNativeCommandUseErrorActionPreference = $true, и ненулевой выход становится ошибкой.

Исправление у меня всё время выходит то же, что и в VBA. -ErrorAction Stop на вызовах, которые могут упасть, по одному try вокруг каждого и catch, который говорит, какой сбой он ожидал.