Первый пример
Ошибка возникает во время компиляции / синтаксического анализа (PowerShell достаточно умен), так что код даже не выполняется, и он действительно ничего не может перехватить. Попробуйте этот код, и вы поймаете исключение:
try
{
$x = 0
$i = 1/$x
Write-Host $i
}
catch [Exception]
{
Write-Host "Error testing :)"
}
Второй пример
Если вы установите $ErrorActionPreference = 'Stop'
глобально, то вы получите «Error test :)», как и ожидалось. Но ваш $ErrorActionPreference
предположительно 'Continue'
: в этом случае нет завершающей ошибки / исключения, и вы просто получаете сообщение о не прерывной ошибке, напечатанное на хосте движком.
Вместо глобальной опции $ErrorActionPreference
вы также можете играть с параметром Get-WmiObject
ErrorAction
. Попробуйте установить его на Stop
, и вы поймаете исключение.
try
{
Get-WmiObject -ErrorAction Stop -ComputerName possibly.nonexisting.domain.com -Credential (Get-Credential) -Class Win32_logicaldisk
}
catch [Exception]
{
Write-Host "Error testing :)"
}