PowerShell异常捕获

时间:2018-06-19 06:41:05

标签: powershell exception

我想获得某些设备的IP。其中一些是无法到达的。如果PowerShell想要获取无法访问的设备的IP,它将终止整个脚本。我想过捕捉异常。但我找不到任何关于如何捕捉"主机未知"。我不太了解我尝试过的例外情况,但当然它不起作用:

` try {
    $IPClient = Test-Connection $name -Count 1
    $IPv4 = $IPClient.IPV4Address.IPAddressToString 
    } catch {
    $IPv4 = "Could not find $name"
 }`

如果PowerShell找到无法访问的设备,它将终止整个脚本。 我怎样才能抓住这个,以便我的$name列表继续,并且可以填充变量"找不到$name"或类似的东西?

1 个答案:

答案 0 :(得分:2)

Test-Connection正在抛出一个“非终止”异常,catch无法处理。要强制它变为“终止”(因此由catch处理),请使用-ErrorAction参数:

try 
 {
    $IPClient = Test-Connection $name -Count 1 -ErrorAction Stop
    $IPv4 = $IPClient.IPV4Address.IPAddressToString 
 } 
 catch 
 {
    $IPv4 = "Could not find $name"
 }

编辑:测试多台服务器

要测试服务器列表,捕获任何失败的服务器,一个选项是:

$names = "Server1","Server2","Server3"
$ipv4 = @{}

foreach($server in $names)
{
    try 
    {
        $ipClient = Test-Connection $server -Count 1 -ErrorAction Stop
        $ipv4.Add($server, $IPClient.IPV4Address.IPAddressToString)
    }
    catch 
    {
       $ipv4.Add($server, "Unreachable")
    }
 }

$ipv4是一个哈希表,您可以这样显示:

$ipv4

在表中给出输出:

Name       Value        
----       -----        
server2    Unreachable  
Server3    10.10.10.10
server1    Unreachable 

按名称访问任何项目:

$ipv4.Server2