强制测试连接以使用IPv4

时间:2015-08-15 12:09:28

标签: powershell-v4.0

我有一个使用Test-Connection测试主机的脚本。如果成功则继续,如果不成功,则说明主机处于脱机状态。

问题是,我们的企业在DNS区域中有IPv6条目。在DNS中使用IPv6注册的主机首先响应,并且由于IPv6未被使用,Test-Connection表示它们处于脱机状态。但是,带有ping开关的旧时尚-4可以正常工作,并且会响应。

我一直在寻找一种强制Test-Connection强制使用IPv4的转换,但无法找到任何内容。我无法对DNS区域进行大量更改以清除IPv6记录,因为主机只会重新注册。我不能控制它。

Ping运行正常,但我遇到了麻烦,因为我无法让它返回简单的TRUE或FALSE。

1 个答案:

答案 0 :(得分:1)

运行ping并检查$LASTEXITCODE automatic variable

& ping -4 -n 1 $server >$null
if ($LASTEXITCODE -eq 0) {
    'success'
} else {
    "$server not accessible"
}

您还可以先进行名称查找,将其限制为IPv4地址(仅限A记录),然后在IPv4地址上运行Test-Connection

$ip = & nslookup -type=A $server |
      Select-Object -Skip 4 -First 1 |
      ForEach-Object { $_.Split(':')[1].Trim() }

Test-Connection $ip

如果您至少拥有Windows 8,则可以使用Resolve-DnsName代替nslookup,这是一个更多的PoSh:

$ip = Resolve-DnsName -Type A $server |
      Select-Object -Expand IPAddress