我想获得某些设备的IP。其中一些是无法到达的。如果PowerShell想要获取无法访问的设备的IP,它将终止整个脚本。我想过捕捉异常。但我找不到任何关于如何捕捉"主机未知"。我不太了解我尝试过的例外情况,但当然它不起作用:
` try {
$IPClient = Test-Connection $name -Count 1
$IPv4 = $IPClient.IPV4Address.IPAddressToString
} catch {
$IPv4 = "Could not find $name"
}`
如果PowerShell找到无法访问的设备,它将终止整个脚本。
我怎样才能抓住这个,以便我的$name
列表继续,并且可以填充变量"找不到$name
"或类似的东西?
答案 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