Почему вы не думаете, что это работает? Имейте в виду, что PowerShell различает не прекращающиеся ошибки, подобные предыдущей, и завершающие ошибки, которые вы получаете при выполнении throw 'Access denied.'
. Не завершающие ошибки записываются в stderr и записываются в коллекцию $ error, но они не останавливают обработку скрипта. Эта функция очень удобна, когда вы обрабатываете (например, удаляете или копируете) кучу файлов. Вы хотите знать, какие файлы не могут быть обработаны, но не хотите, чтобы вся операция остановилась на первом файле, который выдает ошибку.
PowerShell также дает вам возможность «преобразовывать» не прекращающиеся ошибки в завершающие ошибки, например,
Remove-Item c:\file-doesnt-exist -ErrorAction Stop; "Did I get here"
Обратите внимание, что в этом случае выполнение останавливается и не выводит строку в конце. Попробуйте без -ErrorAction Stop
, и вы увидите ошибку, но вы также увидите строку «Я сюда попал».
Если вы хотите управлять информацией о Catogory, вы можете использовать параметр -Category следующим образом:
PS> write-error "foo" -Category 'InvalidResult'
write-error "foo" -Category 'InvalidResult' : foo
+ CategoryInfo : InvalidResult: (:) [Write-Error], WriteErrorExce..
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException
Но WriteErrorException - это механизм (я думаю), с помощью которого этот командлет вызывает ошибку. Есть параметр Exception
, но мне не очень повезло с его использованием.