Seu script está falhando porque a variável $DNS
não contém o nome DNS.
E você está enviando para o if
.
Você deve enviar $Hostname
para o if
.
Com este código, funcionará:
$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
}
}
E você receberá uma saída como esta:
Você tem outro problema no seu código que talvez você não tenha visto. Devido à maneira como você define a variável $Hostname
, ela não será alterada quando o nome DNS não estiver correto. Verifique e defina-o usando outra técnica.