我有一个使用Test-Connection
测试主机的脚本。如果成功则继续,如果不成功,则说明主机处于脱机状态。
问题是,我们的企业在DNS区域中有IPv6条目。在DNS中使用IPv6注册的主机首先响应,并且由于IPv6未被使用,Test-Connection
表示它们处于脱机状态。但是,带有ping
开关的旧时尚-4
可以正常工作,并且会响应。
我一直在寻找一种强制Test-Connection
强制使用IPv4的转换,但无法找到任何内容。我无法对DNS区域进行大量更改以清除IPv6记录,因为主机只会重新注册。我不能控制它。
Ping运行正常,但我遇到了麻烦,因为我无法让它返回简单的TRUE或FALSE。
答案 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