Como suprimir o texto do erro com Get-DhcpServerv4Lease

4

Eu tenho um script simples para examinar um intervalo de IPs no DHCP e relatar todos os endereços que não possuem concessões. Há uma função que supostamente já faz isso, mas não parece funcionar para mim.

De qualquer forma, o que estou procurando entender é por que o código a seguir não detecta erros:

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
    }
}

Eu continuo recebendo isso:

Get-DhcpServerv4Lease: falha ao obter informações de concessão para o IPAddress 172.30.218.255 do servidor DHCP servername.

Eu tenho uma solução alternativa, mas gostaria de entender o que está acontecendo aqui.

A solução alternativa também tem o texto vermelho horrível, mas pelo menos eu coleciono os ips nos quais estou interessado quando o redireciono para um arquivo:

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 }
}  
    
por MatthewP 20.08.2015 / 19:48

1 resposta

3

Em Get-Help about_Try_Catch_Finally :

SHORT DESCRIPTION

Describes how to use the Try, Catch, and Finally blocks to handle terminating errors.

Somente erros de finalização podem ser detectados. Você pode fazer com que o PowerShell trate os erros de terminação não como um erro de terminação com -ErrorAction Stop . Isso irá catch do erro e executará o bloco conforme o esperado. Observe que isso afeta apenas o comportamento de erros de Get-DhcpServer4Lease . Você pode especificar $ErrorActionPreference = 'Stop' no topo do seu script para alterá-lo para todo o escopo.

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"
    }

}

Outra opção, se você não se importa com o erro, é SilentlyContinue :

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

Consulte Get-Help about_CommonParameters para obter mais detalhes sobre ErrorAction e ErrorVariable .

    
por 20.08.2015 / 20:13

Tags