如何使用 Get-DhcpServerv4Lease 隐藏错误文本

如何使用 Get-DhcpServerv4Lease 隐藏错误文本

我有一个简单的脚本,用于查看 DHCP 中的 IP 范围并报告所有没有租约的地址。据说已经有一项功能可以做到这一点,但它似乎对我不起作用。

无论如何,我想了解的是为什么下面的代码没有捕获错误:

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:无法从 DHCP 服务器服务器名获取 IP 地址 172.30.218.255 的租约信息。

我有一个解决方法,但我想了解这里发生了什么。

解决方法也有可怕的红色文本,但至少当我将其重定向到文件时,我收集了我感兴趣的 ips:

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

答案1

Get-Help about_Try_Catch_Finally

简短的介绍

描述如何使用 Try、Catch 和 Finally 块来处理终止错误。

只能捕获终止错误。你可以让 PowerShell 处理-terminating 错误作为带有 的终止错误-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

相关内容