Assistência na verificação do endereço IP e nome DNS para a disponibilidade do ping?

1

Eu aprecio seus esforços em me ajudar a modificar o script abaixo para que ele possa verificar & converter a lista de IPAddress e hostname em algo como:

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

é um desafio converter IP para DNSName e DNSName para IP e verificar o status on-line com base em Ping,

o seguinte é o script que eu posso criar até agora:

$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
   }
 }

No entanto, o script acima ainda apresenta um erro lógico menor da seguinte forma:

  1. todo o resultado é sempre exibido como inativo?

  2. algum resultado é sempre duplicado, mesmo que o endereço IP desse host específico seja apenas um?

Qualquer tipo de ajuda seria muito apreciado.

Obrigado.

    
por Senior Systems Engineer 13.10.2011 / 01:02

2 respostas

1

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.

    
por 19.10.2011 / 16:53
1

Você pode querer adicionar -quiet ao final de sua condição de conexão de teste para que ele retorne apenas um booleano. Você obtém muito mais dados além de $ true ou $ false se você fizer dessa maneira.

    
por 13.10.2011 / 01:44