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

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

非常感谢您帮助我修改下面的脚本,以便它可以检查并将 IP 地址和主机名列表转换为以下内容:

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 地址只有一个,但结果总是会重复吗?

任何形式的帮助将不胜感激。

谢谢。

答案1

您的脚本失败,因为$DNS变量不包含 DNS 名称。并且您正在将其发送到if

您应该发送$Hostnameif

使用此代码它将起作用:

$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当 DNS 名称不正确时,它不会改变。检查它并使用另一种技术定义它。

答案2

您可能希望在测试连接条件的末尾添加 -quiet,以便它仅返回布尔值。如果这样做,除了 $true 或 $false 之外,您还能获得更多数据。

相关内容