PowerShell 2.0 и как обрабатывать исключения?
почему я получаю сообщение об ошибке печатается на консоль при выполнении этих двух простых примеров ? Я хочу, чтобы я получил "Error testing:)", напечатанный на консоли insted of:
Get-WmiObject: сервер RPC недоступный. (Исключение из HRESULT: 0x800706BA) в строке: 3 char:15 + Get-WmiObject
или
попытка деления на ноль. На линии:3 char: 13 + $i = 1/ + CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId: RuntimeException
первый пример:
try
{
$i = 1/0
Write-Host $i
}
catch [Exception]
{
Write-Host "Error testing :)"
}
1 ответов
первый пример
ошибка происходит во время компиляции/синтаксического анализа (PowerShell достаточно умен), так что код даже не выполняется, и он ничего не может поймать. Попробуйте этот код, и вы поймаете исключение:
try
{
$x = 0
$i = 1/$x
Write-Host $i
}
catch [Exception]
{
Write-Host "Error testing :)"
}
второй пример
если вы устанавливаете $ErrorActionPreference = 'Stop'
глобально, тогда вы получите" тестирование ошибок:)", как и ожидалось. Но ваш $ErrorActionPreference
предположительно 'Continue'
: в этом случае нет завершающей ошибки / исключения, и вы просто получаете сообщение об ошибке, напечатанное на хосте двигателем.
вместо глобального вы также можете играть с 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 :)"
}