1. Anasayfa
  2. Uncategorized

PowerShell ile Toplu Ping Kontrolü ve Subnet Taraması


PowerShell sistem yöneticilerinin ve IT profesyonellerinin ağ topolojilerini tarama, ping kontrolü yapma ve IP adreslerini denetleme gibi işleri kolayca gerçekleştirmesine olanak tanır.

Bu makalemde hem toplu ping kontrolü yapmak hem de bir veya birden fazla subneti taramak için kullanabileceğiniz PowerShell betiklerini inceleyeceğiz.

Ping kontrolü yapmadan önce kontrol etmek istediğiniz IP adreslerini veya bilgisayar adlarını bir dosyada listelemeniz gerekir. Bu örnekte bir hosts.txt dosyası oluşturuyoruz. hosts.txt dosyası içeriği aşağıdaki gibi olmalıdır.

8.8.8.8
8.8.4.4
google.com
yahoo.com

Aşağıdaki PowerShell scripti ile bu listeyi okuyarak her IP adresi veya bilgisayar adının ping sonucunu kaydeder ve bir CSV dosyası olarak çıktı verecektir.

# IP veya Hostname listesinin dosya yolu
$listFile = "C:\temp\hosts.txt"

# Çıktı dosyası
$outputFile = "C:\temp\PingSonuclari.csv"

# Listeyi oku
$hosts = Get-Content -Path $listFile

# Sonuçları saklamak için bir dizi oluştur
$results = @()

foreach ($host in $hosts) {
    # Ping işlemi
    $pingResult = Test-Connection -ComputerName $host -Count 2 -Quiet

    # Sonucu kaydet
    $results += [PSCustomObject]@{
        Hostname = $host
        Status   = if ($pingResult) { "Başarılı" } else { "Başarısız" }
        Timestamp = Get-Date
    }
}

# Sonuçları CSV dosyasına kaydet
$results | Export-Csv -Path $outputFile -NoTypeInformation -Encoding UTF8

Write-Host "Ping kontrolü tamamlandı. Sonuçlar: $outputFile"

Sonuçlar belirtilen PingSonuclari.csv dosyasında saklanır.

Subnet taraması; bir subnet içindeki IP adreslerinin ping ile kontrol edilmesini sağlar. Aşağıdaki script belirttiğiniz bir veya birden fazla subneti tarayarak aktif (ulaşılabilir) ve pasif (ulaşılamaz) IP adreslerini raporlar.

# Subnet başlangıç adresi ve son oktet aralığı
$subnet = "192.168.1"
$startRange = 1
$endRange = 254

# Çıktı dosyası
$outputFile = "C:\temp\SubnetTaramasiSonuclari.csv"

# Sonuçları saklamak için bir dizi oluştur
$results = @()

foreach ($i in $startRange..$endRange) {
    $ipAddress = "$subnet.$i"

    # Ping işlemi
    $pingResult = Test-Connection -ComputerName $ipAddress -Count 1 -Quiet

    # Sonucu kaydet
    $results += [PSCustomObject]@{
        IPAddress = $ipAddress
        Status    = if ($pingResult) { "Aktif" } else { "Pasif" }
        Timestamp = Get-Date
    }
}

# Sonuçları CSV dosyasına kaydet
$results | Export-Csv -Path $outputFile -NoTypeInformation -Encoding UTF8

Write-Host "Subnet taraması tamamlandı. Sonuçlar: $outputFile"

Birden fazla subneti taramak için subnetleri bir dizi olarak tanımlayabilirsiniz;

# Subnet listesi
$subnets = @("192.168.1", "192.168.2", "10.0.0")

# IP aralığı
$startRange = 1
$endRange = 254

# Çıktı dosyası
$outputFile = "C:\temp\SubnetTaramasiSonuclari.csv"

# Sonuçları saklamak için bir dizi oluştur
$results = @()

foreach ($subnet in $subnets) {
    Write-Host "Taranıyor: $subnet.0/24"

    foreach ($i in $startRange..$endRange) {
        $ipAddress = "$subnet.$i"

        # Ping işlemi
        $pingResult = Test-Connection -ComputerName $ipAddress -Count 1 -Quiet

        # Sonucu kaydet
        $results += [PSCustomObject]@{
            Subnet    = $subnet
            IPAddress = $ipAddress
            Status    = if ($pingResult) { "Aktif" } else { "Pasif" }
            Timestamp = Get-Date
        }
    }
}

# Sonuçları CSV dosyasına kaydet
$results | Export-Csv -Path $outputFile -NoTypeInformation -Encoding UTF8

Write-Host "Subnet taraması tamamlandı. Sonuçlar: $outputFile"