Resolve-DnsName: DNS Kayıtlarını PowerShell ile Çözümleme


Web veya posta sunucularını yönetiyorsanız, bu sunucuların yeterince yapılandırılmış DNS kayıtlarına ne kadar bağımlı olduğunu bilirsiniz. Eksik DNS kayıtları, kullanıcıların web sitenizi bulamaması veya e-postaların teslim edilememesi dahil her türlü soruna neden olabilir. PowerShell Resolve-DnsName cmdlet'inin mevcut olması iyi bir şeydir ve bununla birlikte, DNS kayıtlarının izlenmesi komut dosyası oluşturma yoluyla otomatikleştirilebilir.

Bir yöneticinin günü zaten yeterince dolu ve DNS kayıtlarının uygun şekilde çözümlenip çözümlenemeyeceğini manuel olarak kontrol etmek, daha fazla manuel çaba anlamına geliyor.

Bu makalede, PowerShell ile DNS kayıtlarını sorgulamak için Resolve-DnsName cmdlet'inin ne ve nasıl kullanılacağını öğreneceksiniz. Bu makalenin sonunda, izlenecek DNS kayıtlarınızın raporunu oluşturmak için temel bir komut dosyasının nasıl oluşturulacağını da öğrenmiş olacaksınız.

Önkoşullar

Bu makale bir genel bakış niteliğindedir ve örneklerle birlikte ilerlemeyi planlıyorsanız şunlara ihtiyacınız olacak:

  • Windows 10 veya üstünü çalıştıran bir bilgisayar.
  • Windows PowerShell 5.1 veya PowerShell 7.0
  • Visual Studio Code, Atom veya Notepad++ gibi bir komut dosyası düzenleyicisi.

Resolve-DnsName: PowerShell DNS Çözümleyicisi

DNS sorgusu gerçekleştirmenin birden fazla yolu vardır. Resolve-DnsName cmdlet'i, Windows ile birlikte gelen nslookup komut satırı aracına veya daha fazla bilgi sahibiyseniz dig komutuna benzer. bir Linux yöneticisi.

Bazı web siteleri DNS kaydı izleme/raporlama hizmetleri sunmaktadır. Ancak bu üçüncü taraf hizmetlerinin elbette çoğu zaman bir maliyeti vardır. Komut dosyası yazma becerilerinizi göstermenize de olanak tanıyan ücretsiz bir alternatif de var!

Resolve-DnsName cmdlet'i, adından da anlaşılacağı gibi, DNS adlarını IP adreslerine (veya tam tersi) çözer. Bu cmdlet, bu yazının yazıldığı tarih itibarıyla Windows 10, Windows Server 2012/R2, Windows Server 2016 ve Windows Server 2019 ile birlikte gelen dnsclient PowerShell modülünün bir parçasıdır.

Resolve-DnsName bir PowerShell cmdlet'i olduğundan sonuçlarını depolanabilen, değiştirilebilen ve dışarı aktarılabilen nesneler olarak döndürür. Örneğin, Resolve-DnsName google.com komutunu kullanarak google.com'un DNS kaydını aramak size aşağıda gösterilen çıktıyı verir.

Sonuç, sonuçları bir CSV dosyasına aktarmanıza veya HTML raporları oluşturmak için biçimi değiştirmenize olanak tanıyan bir nesne olarak döndürüldü.

Resolve-DnsName cmdlet'i eski okul nslookup yardımcı programından farklıdır. nslookup basit bir dize döndürür. Aşağıdaki ekran görüntüsünde bir örnek görebilirsiniz. Bu bilgilerden herhangi birini ayrıştırmanız gerekiyorsa, bu bir mücadele olacaktır.

Farklı Türdeki DNS Kayıtlarını Sorgulama

Varsayılan olarak Resolve-DnsName, DNS kayıtlarının A ve AAAA türlerini sorgular. Örneğin, aşağıdaki komutu kullanarak gmail.com DNS kaydını ararsanız:

Resolve-DnsName -Name gmail.com

Aşağıda görebileceğiniz gibi yalnızca AAAA ve A kayıtları döndürülmektedir. Bunun nedeni, aranacak DNS kayıt türünün belirtilmemiş olmasıdır.

Gmail.com'un Google'ın e-posta hizmeti tarafından kullanılan bir e-posta alanı olduğunu bildiğimize göre, onunla ilişkilendirilmiş bir MX kaydının olması gerekir, değil mi? Bu komutu kullanarak ne zaman onaylayabileceğinizi varsaymanıza gerek yok:

Resolve-DnsName -Name gmail.com -Type MX

Aşağıdaki ekran görüntüsünde gösterilen çıktı, gmail.com için MX kayıt listesini göstermektedir.

Resolve-DnsName ile kullanılabilecek farklı kayıt türleri hakkında daha fazla bilgi edinmek için bu bağlantıyı ziyaret edin ve -Type parametresine ilişkin tabloyu arayın. Veya get-help Resolve-DnsName komutunu kullanarak Resolve-DnsName yardımına başvurabilirsiniz.

DNS Araması için Belirli Sunucuları Kullanma

Resolve-DnsName, varsayılan olarak bilgisayarınızda yapılandırılan DNS sunucu adreslerini kullanır. Ancak arama yaparken Resolve-DnsName'in belirli bir DNS sunucusu kullanmasını da sağlayabilirsiniz.

Örneğin, kayıtları aramak için Google Public DNS'i kullanmak istiyorsanız, aşağıdaki örneğe benzer şekilde komutunuza -Server parametresini ekleyerek bunu yapabilirsiniz.

# Google Public DNS Server IPs
$dnsServer = @('8.8.8.8','8.8.4.4')
Resolve-DnsName adamtheautomator.com -Server $dnsServer

Yukarıdaki komutun sonucu aşağıdaki ekran görüntüsünde gösterilene benzer olacaktır.

Bu noktada “neden farklı bir DNS sunucusu kullanmam gerekiyor?” diye soruyor olabilirsiniz. Bu geçerli bir soru. Aynı kaydı makinenizin varsayılan DNS sunucusunu veya başka bir DNS sunucusunu kullanarak aramayı denerseniz, muhtemelen aynı sonucu alabilirsiniz.

Resolve-DnsName ile farklı DNS sunucuları kullanmanın birçok nedeni olabilir. Bu nedenlerden bazıları şunları içerebilir:

  • Hız - Bazı DNS sunucuları diğerlerinden daha hızlı performans gösterebilir.
  • Güvenlik - Bazı DNS sunucuları, ele geçirmeleri ve saldırıları önleyen diğerlerinden daha fazla güvenlik önlemine sahip olabilir.
  • Kayıtların kullanılabilirliği - Çoğu senaryoda kuruluşların, yalnızca dahili olarak çözümlenen adlara ilişkin bölgeleri ve kayıtları içeren kendi dahili DNS sunucuları vardır. Bu durumda, genel bir DNS sunucusu kullanarak dahili adı aramak başarısız olur.

  • DNS sunucuları istekleri iletmiyor - Bazı kuruluşlar DNS iletmeye izin vermiyor. Bunları genel DNS kayıtlarının DNS araması için kullanmak başarısız olur.
  • Sorun Giderme ve Test Etme - Favori DNS sunucularınız çalışmaya başladığında, aramalarınızı farklı bir DNS sunucusu kullanarak test etmek isteyebilirsiniz.

PowerShell Betiğini Kullanarak DNS Kayıtlarını Raporlama

Artık Resolve-DnsName cmdlet'inin nasıl kullanılacağına ilişkin temel bilgileri öğrendiğinize göre, bu bölümde DNS kayıtlarını izlemek ve raporlamak için bir PowerShell betiği oluşturmayı öğreneceksiniz. Bu betiği oluştururken şu ana kadar önceki bölümlerde edindiğiniz bilgileri uygulayabilmelisiniz.

Tercih ettiğiniz komut dosyası düzenleyicinizi çalıştırın ve GetDnsRecord.ps1 adında yeni bir dosya oluşturun.

Değişkenleri Tanımlama

Öncelikle kullanılacak değişkenleri belirleyin. Bu değişkenler aşağıdakileri içerecektir:

  • $NameList - Bu değişken, komut dosyanızın sorgulamasını istediğiniz DNS kayıtlarının adlarını tutar
  • $Serverlist - Komut dosyası tarafından aramalar için kullanılacak DNS sunucularını belirtmek için bu değişkeni kullanın.

Aşağıdaki kodu kopyalayıp betiğinizin başına yapıştırın.

$NameList = @('adamtheautomator.com','powershell.org','xyz.local')
$ServerList = @('8.8.8.8','8.8.4.4')

DNS Aramaları Gerçekleştirme

Daha sonra kodun belirtilen adların her birinin DNS kaydını arayabilmesi gerekir. Bu durumda, kayıt listesini yinelemek ve Resolve-DnsName kullanarak her adı aramak için foreach döngüsü kullanılacaktır.

$FinalResult=@() satırı, nihai sonucun saklanacağı boş bir dizi oluşturur. Daha sonra PowerShell, foreach döngüsünü kullanarak $NameList değişkenindeki her öğeyi $Name adlı bir değişkene iletir.

Her yinelemede $tempObj="" | satırı Select-Object Name,IPAddress,Status,ErrorMessage, başarılı DNS aramasının sonucunu tutmak için oluşturulan dört özelliğe sahip geçici bir nesne oluşturur.

Daha sonra, DNS A kayıtlarını aramak ve $tempObj değerlerini doldurmak üzere Resolve-DnsName komutunu çalıştırmak için try{ ifadesi kullanılır. DNS aramasının başarısız olması durumunda catch{ ifadesi hatayı yakalar ve hata $tempObj nesnesine dahil edilir.

Her yinelemenin sonunda, $tempObj nesnesinin değeri $FinalResult'a eklenecektir. $NameList dizisindeki son öğe işlendiğinde döngüden çıkılacaktır. Ardından $FinalResult'un değeri görüntülenecektir.

Aşağıdaki kodu kopyalayıp betiğinizin sonuna yapıştırın. Herhangi bir değeri değiştirmenize gerek yoktur.

$FinalResult = @()
foreach ($Name in $NameList) {
    $tempObj = "" | Select-Object Name, IPAddress, Status, ErrorMessage
    try {
        $dnsRecord = Resolve-DnsName $Name -Server $ServerList -ErrorAction Stop | Where-Object { $_.Type -eq 'A' }
        $tempObj.Name = $Name
        $tempObj.IPAddress = ($dnsRecord.IPAddress -join ',')
        $tempObj.Status = 'OK'
        $tempObj.ErrorMessage = ''
    }
    catch {
        $tempObj.Name = $Name
        $tempObj.IPAddress = ''
        $tempObj.Status = 'NOT_OK'
        $tempObj.ErrorMessage = $_.Exception.Message
    }
    $FinalResult += $tempObj
}
return $FinalResult

Komut dosyasını kaydettikten sonra, adını GetDnsRecord.ps1 olarak adlandırarak PowerShell'de çalıştırın. Aşağıdaki gösteri çıktıyı göstermektedir.

Yukarıdaki sonuçtan görebileceğiniz gibi çıktı, aşağıdaki komutu kullanarak sonuçları CSV gibi bir dosyaya aktarmak istiyorsanız kullanışlı olan bir nesnedir.

.\GetDnsRecord.ps1 | Export-Csv DnsRecord.csv -NoTypeInformation

CSV çıktısı aşağıdakine benzer görünecektir.

Çözüm

Bu makalede, PowerShell'de DSN kayıtları araması gerçekleştirmek için Resolve-DnsName cmdlet'inin nasıl kullanılacağına ilişkin temel bilgileri öğrendiniz. Ayrıca Resolve-DnsName'in nslookup yardımcı programı gibi diğer araçlardan ne kadar farklı olduğunu da öğrendiniz.

DNS kaydı aramasını otomatikleştirmek için Resolve-DnsName'in bir komut dosyasında nasıl kullanılabileceğini gördünüz. Bu, ilgilendiğiniz DNS kayıtlarının mevcut durumundan haberdar olmanızı sağlayacak bir izleme aracı olarak faydalı olacaktır.

PowerShell komut dosyası oluşturma becerilerinizi kullanarak, raporu belirli alıcılara e-postayla otomatik olarak göndermek için kod eklenerek raporlama komut dosyası daha da geliştirilebilir. Ayrıca görsel olarak hoş bir HTML çıktısı oluşturmak için değiştirilebilir.

Sonuçta Resolve-DnsName, ister manuel olarak ister komut dosyalarında otomasyon için kullanın, DNS araması için mükemmel bir araçtır. Artık nasıl çalıştığı hakkında bilginiz var ve bunu yönetim görevlerinizin bir parçası olarak kullanmanın yollarını bulmak size kalmış.

Daha fazla okuma

  • Google Genel DNS
  • Temel Konulara Dönüş: PowerShell Nesnelerini Anlama
  • Export-Csv: CSV Dosyalarına Birinci Sınıf Vatandaş Gibi Davranmanın PowerShell Yolu
  • Powerİpucu: DNS Ayarlarını Almak için PowerShell'i Kullanın
  • ConvertTo-Html ile PowerShell'de HTML raporları oluşturma
  • PowerShell ile HTML Raporu Nasıl Oluşturulur

İlgili makaleler