如何使用Get-DhcpServerv4Lease抑制错误文本

我有一个简单的脚本来查看DHCP中的IP范围,并报告所有没有租约的地址。 有一个function,应该已经这样做了,但它似乎并没有为我工作。

在任何情况下,我期望明白为什么下面的代码不会发生错误:

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服务器servername获取IPAddress 172.30.218.255的租约信息。

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

解决方法也有可怕的红色文本,但至less我收集我感兴趣的ips,当我redirect到一个文件:

 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块来处理终止错误。

只有终止错误可以被捕获。 使用-ErrorAction Stop可以使PowerShell将终止错误视为终止错误。 这将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 } 

有关ErrorActionErrorVariable更多详细信息,请参阅Get-Help about_CommonParameters