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"