Обработка ошибок с помощью PowerShell 7 и совместимости с Windows PowerShell

#windows #powershell

Вопрос:

Недавно я начал переходить к использованию PowerShell 7 для своих нужд в написании сценариев, так как большинство необходимых мне модулей теперь совместимы.

Однако модуль «MSOnline» еще не обновлен, и они рекомендуют использовать этот -UseWindowsPowerShell параметр при импорте модуля.

Это абсолютно здорово, и модуль можно использовать (почти) в полную силу. Однако -ErrorVariable параметр, похоже, не работает, и поэтому я не могу выполнить какую-либо обработку ошибок.

Смотрите ниже код для примера того, что не работает:

 Import-Module MSOnline -UseWindowsPowerShell
Connect-MsolService -ErrorAction SilentlyContinue -ErrorVariable msolError
Write-Host $msolError
 

Кажется, что -ErrorAction параметр соблюдается, но я, похоже, ничего не могу получить внутри переменной ошибки.

Кто-нибудь знает, можно ли каким-то образом получить значения ошибок модуля, загруженного подобным образом?

Комментарии:

1. Что произойдет, если вы попытаетесь вывести $Error[0] данные ?

2. К сожалению, он пуст

3. Выдает ли командлет ошибку, если вы не включили -ErrorAction параметр? Действительно Connect-MSOLService ли это провал?

4. Если не указано действие с ошибкой, вывод ошибки выводится на консоль. Однако я попытался установить его в качестве переменной $output = Get-MsolService и распечатать таким образом, но вывода нет.

Ответ №1:

-ErrorAction SilentlyContinue будет подавлять любые сообщения об ошибках. Удалите его из команды, чтобы получить вывод.

Команда должна быть: Connect-MsolService -ErrorVariable "msolError"

Просто вызовите $msolError, чтобы просмотреть ошибку.

Комментарии:

1. Это неправда. -ErrorAction SilentlyContinue подавляет отображение сообщений об ошибках, но не препятствует -ErrorVariable заполнению. Пример также не работает, так как сообщение об ошибке просто выводится, а переменная не заполняется.