我将非常感谢您帮助我修改以下脚本的努力,以便它可以检查并将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 } }
但是,上面的脚本仍然有一些小的逻辑错误,如下所示:
所有的结果总是显示为下?
即使该特定主机的IP地址只有一个,一些结果总是被复制?
任何forms的帮助将不胜感激。
谢谢。
您的脚本失败,因为$DNS
variables不包含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 } }
你会得到这样的输出:
你的代码中有另一个问题,也许你还没有看到。 由于您定义$Hostname
variables的方式,当DNS名称不正确时不会更改。 检查它使用另一种技术来定义它。
您可能需要将-quiet添加到testing连接条件的末尾,以便仅返回布尔值。 如果你这样做,你会得到比$ true或$ false更多的数据。