协助检查IP地址和DNS名称是否可用?

我将非常感谢您帮助我修改以下脚本的努力,以便它可以检查并将IPAddress和主机名列表转换为如下forms:

DomainController1 - 10.1.1.10 - UP CoreGatewayRTR1 - 10.1.1.254 - DOWN JohnPC01 - NO-IP-Address - DOWN LindaLaptop02 - 10.1.1.234 - DOWN . . . 

将IP转换为DNSName和DNSName为IP然后根据Ping检查在线状态是一个挑战,

以下是我可以提出的脚本:

 $computers= gc C:\ListOfDevices.txt foreach ($computername in $computers) { $DNS = [System.Net.Dns]::GetHostEntry($ComputerName) $HostName = $DNS.HostName $IP = $DNS.AddressList Trap { Continue } if (Test-Connection $DNS -erroraction SilentlyContinue -Count 1 ) { write-host "$Hostname - $IP - UP" -ForegroundColor GREEN } else { write-host "$Hostname - $IP - DOWN" -ForegroundColor RED } } 

但是,上面的脚本仍然有一些小的逻辑错误,如下所示:

  1. 所有的结果总是显示为下?

  2. 即使该特定主机的IP地址只有一个,一些结果总是被复制?

任何forms的帮助将不胜感激。

谢谢。

您的脚本失败,因为$DNSvariables不包含DNS名称。 你正在发送给if

您应该将$Hostname发送给if

有了这个代码,它将工作:

 $computers= gc C:\ListOfDevices.txt foreach ($computername in $computers) { $DNS = [System.Net.Dns]::GetHostEntry($ComputerName) $HostName = $DNS.HostName $IP = $DNS.AddressList Trap { Continue } if (Test-Connection $HostName -erroraction SilentlyContinue -Count 1) { write-host "$Hostname - $IP - UP" -ForegroundColor GREEN } else { write-host "$Hostname - $IP - DOWN" -ForegroundColor RED } } 

你会得到这样的输出: 结果

你的代码中有另一个问题,也许你还没有看到。 由于您定义$Hostnamevariables的方式,当DNS名称不正确时不会更改。 检查它使用另一种技术来定义它。

您可能需要将-quiet添加到testing连接条件的末尾,以便仅返回布尔值。 如果你这样做,你会得到比$ true或$ false更多的数据。