Búsqueda de sitios web

Lista de ping de computadoras en PowerShell [3 formas]


Diferentes formas de hacer ping a una lista de computadoras en PowerShell

Hay varias formas que podemos utilizar para hacer ping a una lista de computadoras en PowerShell. Ahora bien, ¿qué significa ping? Hacer ping a una computadora significa determinar si la computadora en red está disponible y responde. Si la computadora en red (también podemos llamarla máquina de destino) está disponible y responde, enviará una respuesta al remitente que inició la solicitud de ping. Esta respuesta de la máquina de destino indica que está en línea y ejecutándose.

También hacemos ping a la computadora o lista de computadoras para verificar problemas de red y verificar la conectividad de la red. Por ejemplo, hacer ping a una computadora nos ayuda a comprender si el problema está en la computadora de destino o está relacionado con la conectividad de la red. Para hacer ping a una computadora, podemos usar las siguientes formas:

  • Usando el cmdlet Test-Connect
  • Uso de los cmdlets WMI y Get-WmiObject
  • Usando la clase System.Net.NetworkInformation.Ping

Para aprender cómo hacer ping a una lista de computadoras, hemos guardado las IP de todas las computadoras en un archivo de texto (computersList.txt) que contiene los siguientes datos.

Contenido de ComputerList.txt:

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4

Tenga en cuenta que también puede reemplazar las direcciones IP anteriores con nombres de computadoras.

Ahora sabemos qué es el ping y por qué lo usamos. También tenemos una lista de computadoras a las que hacer ping, así que avancemos hacia los diversos métodos para hacer ping a estas computadoras.

Usando el cmdlet Test-Connect

Para hacer ping a una lista de IP de computadoras en PowerShell:

  • Utilice el cmdlet Get-Content para recuperar una lista de computadoras de computerList.txt y guárdela en una variable.
  • Utilice el bucle foreach para iterar sobre cada computadora en la lista de computadoras que creamos en el paso anterior.
  • En cada iteración del bucle foreach:

    • Utilice el cmdlet Test-Connect para enviar una solicitud de ping y guardar la respuesta en una variable.
    • Utilice if-else para imprimir si la computadora actual está activa/inactiva según la condición especificada.

Utilice el cmdlet Test-Connect:

$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
    $pingComputer = Test-Connection $computer -Count 1 -Quiet
    if ($pingComputer) {
        Write-Host "$computer is up"
    } else {
        Write-Host "$computer is down"
    }
}

PRODUCCIÓN :

192.168.1.1 is up
192.168.1.2 is down
192.168.1.3 is down
192.168.1.4 is down

Primero, utilizamos el cmdlet Get-Content para leer el contenido del archivo computersList.txt y lo guardamos en la variable $computers. El computersList.txt vive en el directorio actual; Puede colocar este archivo donde desee en su máquina local. El computersList.txt contenía las IP de las computadoras, pero aquí también se pueden usar los nombres de las computadoras.

A continuación, utilizamos un bucle foreach para iterar sobre la matriz $computers. En cada iteración, utilizamos Test-Connection con los parámetros -Count y -Quiet para hacer ping a la computadora actual y guardamos la respuesta en el archivo $pingEquipo variable. Aquí, el cmdlet Test-Connection envió el paquete de solicitud de eco (pings) del Protocolo de mensajes de control de Internet (ICMP) a una o varias computadoras.

Podemos usar el cmdlet Test-Connection para verificar si una computadora específica está disponible y responde a través de una red IP. También podemos usar sus parámetros para mencionar las máquinas emisoras y receptoras, establecer un tiempo de espera y un recuento de pings, ejecutar el comando como trabajo en segundo plano y autenticar o configurar una conexión específica. Puedes encontrar más información al respecto aquí.

El cmdlet Test-Connection devuelve TestConnectionCommand+PingStatus como un objeto que podemos usar en PowerShell. Sin embargo, en el ejemplo anterior, no obtenemos TestConnectionCommand+PingStatus como un objeto; ¿por qué? Esto se debe a que utilizamos el parámetro -Quiet, que devolvió un valor booleano, true si la máquina de destino está activa; de lo contrario, falso. Además, el parámetro -Count se usó para especificar que solo se haga ping a una computadora a la vez.

Finalmente, usamos el bloque if-else y verificamos si $pingComputer es true. Si es así, se ejecutará el bloque if; de lo contrario, se ejecutará el bloque else. Finalmente, para mostrar un mensaje en la consola de PowerShell, usamos el cmdlet Write-Host, que se usa para escribir la salida personalizada en el host (host significa consola de PowerShell).

De manera similar, puede hacer ping usando los nombres de las computadoras en lugar de sus IP.

Utilice el cmdlet Test-Connect:

$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
    $pingComputer = Test-Connection $computer -Count 1 -Quiet
    if ($pingComputer) {
        Write-Host "$computer is up"
    } else {
        Write-Host "$computer is down"
    }
}

PRODUCCIÓN :

DESKTOP-THATKM is up
CYBERHOST-PC is down
TAHIR-DESKTOP is down

Uso de los cmdlets WMI y Get-WmiObject

Para hacer ping a una lista de IP de computadoras en PowerShell:

  • Utilice el cmdlet Get-Content para recuperar una lista de computadoras de computerList.txt y guárdela en una variable.
  • Utilice el bucle foreach para iterar sobre cada computadora en la lista de computadoras que creamos en el paso anterior.
  • En cada iteración del bucle foreach:

    • Utilice el cmdlet Win32_PingStatus para enviar una solicitud de ping y almacenar el estado extraído en una variable.
    • Utilice if-else con el operador -eq para imprimir si la computadora actual está arriba/abajo según la condición dada.
    • Adjunte el código dentro de foreach con un bloque try-catch para evitar romper el script y manejar una excepción si ocurre.

Utilice WMI y Get-WmiObject:

$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
    try {
        $pingComputer = Get-WmiObject -Class Win32_PingStatus -Filter "Address='$computer'" |
                        Select-Object -ExpandProperty StatusCode
        if ($pingComputer -eq 0) {
            Write-Host "$computer is up"
        } else {
            Write-Host "$computer is down"
        }
    } catch {
        Write-Host "$computer is down"
    }
}

PRODUCCIÓN :

192.168.1.1 is up
192.168.1.2 is down
192.168.1.3 is down
192.168.1.4 is down

Como en el ejemplo anterior, utilizamos el cmdlet Get-Content para acceder a los datos de computersList.txt y los guardamos en la matriz $computers. Luego, usamos la instrucción foreach para recorrer la matriz $computers.

En cada iteración, utilizamos el cmdlet Get-WmiObject para consultar la clase del Instrumental de administración de Windows (WMI) denominada Win32_PingStatus y obtuvimos el estado de la solicitud de ping para la computadora de destino actual ($computer ). Primero, utilizamos el parámetro -Filter para escribir la computadora de destino. A continuación, utilizamos el cmdlet Select-Object para extraer la propiedad StatusCode del objeto WMI recibido; el resultado final se almacenó en la variable $pingComputer.

Luego, usamos la declaración if con el operador de comparación -eq para determinar si el valor de $pingComptuer es igual a 0 o no. Si es así, muestre que la computadora actual está activa; de lo contrario, está caído. Es posible que hayas notado que envolvimos el cuerpo del bucle foreach con un bloque try-catch para manejar la excepción si ocurre.

Ahora, hagamos ping a varias computadoras usando sus nombres, también llamados nombres de host.

Utilice WMI y Get-WmiObject:

$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
    try {
        $pingComputer = Get-WmiObject -Class Win32_PingStatus -Filter "Address='$computer'" |
                        Select-Object -ExpandProperty StatusCode
        if ($pingComputer -eq 0) {
            Write-Host "$computer is up"
        } else {
            Write-Host "$computer is down"
        }
    } catch {
        Write-Host "$computer is down"
    }
}

PRODUCCIÓN :

DESKTOP-THATKM is up
CYBERHOST-PC is down
TAHIR-DESKTOP is down

Usando la clase System.Net.NetworkInformation.Ping

Para hacer ping a una lista de IP de diferentes computadoras en PowerShell:

  • Utilice el cmdlet Get-Content para acceder a una lista de computadoras desde computerList.txt y guárdela en una variable.
  • Utilice el bucle foreach para iterar sobre cada computadora en la lista de computadoras que creamos en el paso anterior.
  • En cada iteración de foreach:

    • Utilice el cmdlet New-Object para crear un objeto de la clase System.Net.NetworkInformation.Ping y guárdelo en una variable.
    • Utilice el método .Send() para enviar una solicitud de ping a la computadora de destino actual y guardar la respuesta en una variable.
    • Utilice if-else para imprimir si la computadora actual está activa/inactiva según la condición especificada.
    • Adjunte el código dentro de foreach con try-catch para manejar una excepción si ocurre.

Utilice la clase .Ping:

$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
 try {
    $pingComputer = New-Object System.Net.NetworkInformation.Ping
    $response = $pingComputer.Send($computer)
    if ($response. Status -eq "Success") {
        Write-Host "$computer is up"
    } else {
        Write-Host "$computer is down"
    }
 } catch {
        Write-Host "$computer is down"
 }
}

PRODUCCIÓN :

192.168.1.1 is up
192.168.1.2 is down
192.168.1.3 is down
192.168.1.4 is down

Este código es similar al anterior excepto algunos cambios. Primero, utilizamos el cmdlet New-Object para crear un objeto de la clase System.Net.NetworkInformation.Ping y lo guardamos en el archivo $pingComputer variable. A continuación, creamos un objeto de esta clase para acceder a su método .Send() para enviar una solicitud de ping tomando un $computer como argumento.

El método .Send() envía un mensaje de eco ICMP a la computadora dada y obtiene una respuesta de eco ICMP correspondiente de esa computadora; Guardamos esta respuesta en la variable $response. Finalmente, utilizamos la declaración if con el operador -eq para determinar si $response.Status es igual a Éxito. Si es así, muestre que la máquina de destino está en funcionamiento; de lo contrario, está caído. Finalmente, utilizamos el bloque try-catch para evitar romper el script y manejar las excepciones si ocurriera alguna.

Usemos el mismo código para hacer ping a una lista de computadoras usando sus nombres.

Utilice la clase .Ping:

$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
 try {
    $pingComputer = New-Object System.Net.NetworkInformation.Ping
    $response = $pingComputer.Send($computer)
    if ($response. Status -eq "Success") {
        Write-Host "$computer is up"
    } else {
        Write-Host "$computer is down"
    }
 } catch {
        Write-Host "$computer is down"
 }
}

PRODUCCIÓN :

DESKTOP-THATKM is up
CYBERHOST-PC is down
TAHIR-DESKTOP is down

Se trata de cómo hacer ping a la lista de computadoras en PowerShell.

Artículos relacionados