Назад | Перейти на главную страницу

Как подавить текст ошибки с помощью Get-DhcpServerv4Lease

У меня есть простой скрипт, который просматривает диапазон IP-адресов в DHCP и сообщает обо всех адресах, для которых нет аренды. Есть функция, которая якобы уже делает это, но, похоже, у меня она не работает.

В любом случае, я хочу понять, почему следующий код не обнаруживает ошибок:

for ($x = 2; $x -le 255; $x++)
{
    $ip = "172.30.218.$x"

    try
    {
        Get-DhcpServerv4Lease -IPAddress $ip -computername servername | out-null
    }
    catch
    {
        Write-Output $ip
    }
}

Вместо этого я получаю это:

Get-DhcpServerv4Lease: не удалось получить информацию об аренде IP-адреса 172.30.218.255 от имени сервера DHCP-сервера.

У меня есть обходной путь, но я хотел бы понять, что здесь происходит.

Обходной путь также имеет ужасный красный текст, но, по крайней мере, я собираю интересующие меня IP-адреса, когда перенаправляю его в файл:

for ($x = 2; $x -lt 255; $x++)
{
    $ip = "172.30.218.$x"

    $temp = $null
    $temp = Get-DhcpServerv4Lease -IPAddress $ip -computername servername
    if ($temp -eq $null) { Write-Output $ip }
}  

Из Get-Help about_Try_Catch_Finally:

КРАТКОЕ ОПИСАНИЕ

Описывает, как использовать блоки Try, Catch и finally для обработки прерывающих ошибок.

Могут быть обнаружены только завершающие ошибки. Вы можете заставить PowerShell лечить не-определение ошибки как прерывающей ошибки с помощью -ErrorAction Stop. Это будет catch ошибку и запустите блок, как ожидалось. Обратите внимание, что это влияет только на поведение ошибок из Get-DhcpServer4Lease. Вы можете указать $ErrorActionPreference = 'Stop' вверху вашего скрипта, чтобы изменить его для всей области.

for ($x = 2; $x -le 255; $x++) {

    $ip = "172.30.218.$x"

    try {
        Get-DhcpServerv4Lease -IPAddress $ip -ErrorAction Stop
    } catch {
        Write-Output "Can't find $ip"
    }

}

Другой вариант, если вас не волнует ошибка, - SilentlyContinue:

for ($x = 2; $x -le 255; $x++) {
    $ip = "172.30.218.$x"
    Get-DhcpServerv4Lease -IPAddress $ip -ErrorAction SilentlyContinue
}

Видеть Get-Help about_CommonParameters для более подробной информации о ErrorAction и ErrorVariable.