PowerShell'deki Bilgisayarların Ping Listesi [3 Yol]


PowerShell'de Bilgisayar Listesine Ping Atmanın Farklı Yolları

PowerShell'deki bilgisayar listesine ping atmak için kullanabileceğimiz birden fazla yol vardır. Peki ping ne anlama geliyor? Bir bilgisayara ping atmak, ağa bağlı bilgisayarın kullanılabilir ve yanıt verebilir durumda olup olmadığını belirlemek anlamına gelir. Ağa bağlı bilgisayar (hedef makine de diyebiliriz) mevcutsa ve yanıt veriyorsa, ping isteğini başlatan göndericiye yanıt gönderir. Hedef makineden gelen bu yanıt, makinenin çevrimiçi ve çalışır durumda olduğunu gösterir.

Ayrıca ağ sorunlarını kontrol etmek ve ağ bağlantısını doğrulamak için bilgisayara veya bilgisayar listesine ping atıyoruz. Örneğin bir bilgisayara ping atmak, sorunun hedef bilgisayarla mı ilgili olduğunu yoksa ağ bağlantısıyla mı ilgili olduğunu anlamamıza yardımcı olur. Bir bilgisayara ping atmak için aşağıdaki yolları kullanabiliriz:

  • Test-Connect Cmdlet'ini kullanma
  • WMI ve Get-WmiObject Cmdlet'ini kullanma
  • System.Net.NetworkInformation.Ping Sınıfını Kullanma

Bilgisayar listesine nasıl ping atılacağını öğrenmek için tüm bilgisayarların IP'lerini aşağıdaki verileri içeren bir metin dosyasına (computersList.txt) kaydettik.

ComputerList.txt'nin içeriği:

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4

Lütfen yukarıdaki IP adreslerini Bilgisayar adlarıyla da değiştirebileceğinizi unutmayın.

Artık pingin ne olduğunu ve neden kullandığımızı biliyoruz. Ayrıca ping atılacak bilgisayarların bir listesi de var, bu yüzden bu bilgisayarlara ping atmak için çeşitli yöntemlere geçelim.

Test-Connect Cmdlet'ini kullanma

PowerShell'de bilgisayarların IP listesine ping atmak için:

  • computerList.txt dosyasından bilgisayarların listesini almak ve bunu bir değişkene kaydetmek için Get-Content cmdlet'ini kullanın.
  • Önceki adımda oluşturduğumuz bilgisayar listesindeki her bilgisayar üzerinde yineleme yapmak için foreach döngüsünü kullanın.
  • foreach döngüsünün her yinelemesinde:

    • Bir ping isteği göndermek ve yanıtı bir değişkene kaydetmek için Test-Connect cmdlet'ini kullanın.
    • Geçerli bilgisayarın belirtilen koşula göre çalışır durumda olup olmadığını yazdırmak için if-else komutunu kullanın.

Test-Connect Cmdlet'ini kullanın:

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

ÇIKTI:

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

Öncelikle computersList.txt dosyasının içeriğini okumak için Get-Content cmdlet'ini kullandık ve bunu $computers değişkenine kaydettik. computersList.txt geçerli dizinde bulunur; Bu dosyayı yerel makinenizde istediğiniz yere koyabilirsiniz. computersList.txt dosyası bilgisayarların IP'lerini içeriyordu ancak bilgisayar adları da burada kullanılabilir.

Daha sonra, $computers dizisi üzerinde yineleme yapmak için bir foreach döngüsü kullandık. Her yinelemede, mevcut bilgisayara ping atmak için -Count ve -Quiet parametreleriyle Test-Connection'ı kullandık ve yanıtı $pingComputer değişkeni. Burada, Test-Connection cmdlet'i İnternet Kontrol Mesajı Protokolü (ICMP) yankı isteği paketini (ping'leri) bir veya daha fazla bilgisayara gönderdi.

Belirli bir bilgisayarın bir IP ağı üzerinde kullanılabilir ve duyarlı olup olmadığını kontrol etmek için Test-Connection cmdlet'ini kullanabiliriz. Gönderen ve alan makinelerden bahsetmek, zaman aşımı ve ping sayısını ayarlamak, komutu arka plan işi olarak çalıştırmak ve belirli bir bağlantının kimliğini doğrulamak veya yapılandırmak için de parametrelerini kullanabiliriz. Bununla ilgili daha fazlasını burada bulabilirsiniz.

Test-Connection cmdlet'i, PowerShell'de kullanabileceğimiz bir nesne olarak TestConnectionCommand+PingStatus değerini döndürür. Ancak yukarıdaki örnekte TestConnectionCommand+PingStatus'u nesne olarak alamıyoruz; Neden? Bunun nedeni, hedef makine çalışıyorsa true gibi bir Boolean değeri döndüren -Quiet parametresini kullanmamızdır; aksi halde yanlış. Ayrıca aynı anda yalnızca bir bilgisayara ping atılacağını belirtmek için -Count parametresi kullanıldı.

Son olarak if-else bloğunu kullandık ve $pingComputer'ın true olup olmadığını kontrol ettik. Eğer öyleyse, if bloğu yürütülecektir; aksi takdirde else bloğu çalışacaktır. Son olarak PowerShell konsolunda bir mesaj görüntülemek için, özelleştirilmiş çıktıyı ana bilgisayara yazmak için kullanılan Write-Host cmdlet'ini kullandık (ana bilgisayar, PowerShell konsolu anlamına gelir).

Benzer şekilde, IP'leri yerine bilgisayar adlarını kullanarak ping atabilirsiniz.

Test-Connect Cmdlet'ini kullanın:

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

ÇIKTI:

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

WMI ve Get-WmiObject Cmdlet'ini kullanma

PowerShell'de bilgisayarların IP'lerinin listesine ping atmak için:

  • computerList.txt dosyasından bilgisayarların listesini almak ve bunu bir değişkene kaydetmek için Get-Content cmdlet'ini kullanın.
  • Önceki adımda oluşturduğumuz bilgisayar listesindeki her bilgisayar üzerinde yineleme yapmak için foreach döngüsünü kullanın.
  • foreach döngüsünün her yinelemesinde:

    • Bir ping isteği göndermek ve çıkarılan Durumu bir değişkende depolamak için Win32_PingStatus cmdlet'ini kullanın.
    • Mevcut bilgisayarın verilen koşula göre çalışır durumda/aşağı durumda olup olmadığını yazdırmak için if-else operatörünü -eq operatörüyle birlikte kullanın.
    • Komut dosyasının bozulmasını önlemek ve bir istisna meydana gelirse onu ele almak için kodu foreach içine bir try-catch bloğuyla ekleyin.

WMI ve Get-WmiObject'i kullanın:

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

ÇIKTI:

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

Önceki örnekte olduğu gibi, computersList.txt verilerine erişmek için Get-Content cmdlet'ini kullandık ve bunu $computers dizisine kaydettik. Daha sonra $computers dizisi üzerinde döngü yapmak için foreach deyimini kullandık.

Her yinelemede, Win32_PingStatus adlı Windows Yönetim Araçları (WMI) sınıfını sorgulamak için Get-WmiObject cmdlet'ini kullandık ve mevcut hedef bilgisayar için ping isteğinin Durumunu aldık ($computer) ). Öncelikle hedef bilgisayara yazmak için -Filter parametresini kullandık. Daha sonra, alınan WMI nesnesinden StatusCode özelliğini çıkarmak için Select-Object cmdlet'ini kullandık; nihai sonuç $pingComputer değişkeninde saklandı.

Daha sonra $pingComptuer değerinin 0<'a eşit olup olmadığını belirlemek için if ifadesini -eq karşılaştırma operatörüyle birlikte kullandık. /code> veya değil. Öyleyse, mevcut bilgisayarın çalışır durumda olduğunu görüntüleyin; aksi halde düşer. İstisna oluştuğunda bunu ele almak için foreach döngüsünün gövdesini bir try-catch bloğuyla sardığımızı fark etmiş olabilirsiniz.

Şimdi çeşitli bilgisayarlara ana bilgisayar adları da denilen adlarını kullanarak ping atalım.

WMI ve Get-WmiObject'i kullanın:

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

ÇIKTI:

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

System.Net.NetworkInformation.Ping Sınıfını Kullanma

PowerShell'de farklı bilgisayarların IP'lerinin listesine ping atmak için:

  • computerList.txt dosyasından bilgisayarların listesine erişmek için Get-Content cmdlet'ini kullanın ve bunu bir değişkene kaydedin.
  • Önceki adımda oluşturduğumuz bilgisayar listesindeki her bilgisayar üzerinde yineleme yapmak için foreach döngüsünü kullanın.
  • foreach'un her yinelemesinde:

    • System.Net.NetworkInformation.Ping sınıfının bir nesnesini oluşturmak ve bunu bir değişkene kaydetmek için New-Object cmdlet'ini kullanın.
    • Geçerli hedef bilgisayara bir ping isteği göndermek ve yanıtı bir değişkene kaydetmek için .Send() yöntemini kullanın.
    • Geçerli bilgisayarın belirtilen koşula göre çalışır durumda olup olmadığını yazdırmak için if-else komutunu kullanın.
    • Bir istisna oluşması durumunda, kodu foreach içine try-catch ile ekleyin.

.Ping Sınıfını kullanın:

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

ÇIKTI:

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

Bu kod birkaç değişiklik dışında öncekine benzer. Öncelikle System.Net.NetworkInformation.Ping sınıfına ait bir nesne oluşturmak için New-Object cmdlet'ini kullandık ve onu $pingComputer değişken. Daha sonra, argüman olarak $computer alarak bir ping isteği göndermek üzere .Send() yöntemine erişmek için bu sınıfın bir nesnesini oluşturduk.

.Send() yöntemi, verilen bilgisayara bir ICMP yankı mesajı gönderir ve o bilgisayardan karşılık gelen bir ICMP yankı yanıtı alır; bu yanıtı $response değişkenine kaydettik. Son olarak, $response.Status'un Success'e eşit olup olmadığını belirlemek için if ifadesini -eq operatörüyle birlikte kullandık. kodu >. Eğer öyleyse, hedef makinenin çalışır durumda olduğunu gösterin; aksi halde düşer. Son olarak, betiği bozmamak ve varsa istisnaları ele almak için try-catch bloğunu kullandık.

Adlarını kullanarak bilgisayarların listesine ping atmak için aynı kodu kullanalım.

.Ping Sınıfını kullanın:

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

ÇIKTI:

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

Hepsi PowerShell'deki Bilgisayar Listesine nasıl ping atılacağıyla ilgili.

İlgili makaleler