Skrypt wykonujący audyt wszystkich wpisów w DNS
KomendęSkrypt uruchamiamy jako Administrator w powershell ISE,powershell, z zainstalowanymi przystawkami RSAT - DNS.
Skrypt zapisujący wyniki do pliku:
### Pobieranie argumentu adresu serwera DNS ###
if ($args.Count -eq 2) {
$DnsServer = $args[0]
$SavePath = $args[1]
} else {
# Jeśli uruchomiono w ISE lub bez argumentów, prosi o wpisanie ręcznie
Write-Host "Uruchom skrypt poprzez ./NazwaSkryptu.ps1 AdresSerweraDNS ŚcieżkaDoPliku.txt bądź podaj je teraz: "
$DnsServer = Read-Host "Podaj adres serwera DNS"
$SavePath = Read-Host "Podaj ścieżkę do zapisu"
}
# Sprawdzenie czy podano ścieżkę do zapisu
if (-not $SavePath) {
Write-Host "Nie podano ścieżki do zapisu. Skrypt zostanie przerwany." -ForegroundColor Red
exit
}
# Pobranie stref DNS z serwera
$Zones = @(Get-DnsServerZone -ComputerName $DnsServer)
ForEach ($Zone in $Zones) {
# Wypisywanie strefy do konsoli i pliku
Write-Host "`n$($Zone.ZoneName)" -ForegroundColor "Green"
"`n$($Zone.ZoneName)" | Out-File -Append -FilePath $SavePath
# Pobranie rekordów DNS w strefie i zapis do pliku
Get-DnsServerResourceRecord -ComputerName $DnsServer -ZoneName $Zone.ZoneName | Out-File -Append -FilePath $SavePath
}
Write-Host "Zapis zakończony. Dane znajdują się w: $SavePath" -ForegroundColor Cyan
Przykładowe uruchomienie :
Skrypt który każdą zone pokazuje w osobnym, interaktywnym oknie
Uwaga! Przy większej ilości zone w DNS może zająć dużo czasu przez przeklikanie się przez wszystkie okna
Okna otwierają się dopiero po zamknięciu poprzedniego
Add-Type -AssemblyName Microsoft.VisualBasic
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public class WinAPI {
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
}
"@ -Language CSharp
# Tworzenie formularza i ustawienie go na aktywne okno
[System.Windows.Forms.Application]::EnableVisualStyles()
$null = [System.Windows.Forms.Form]::new()
# Wyświetlenie okna dialogowego do wpisania adresu serwera DNS z instrukcją
$DnsServer = [Microsoft.VisualBasic.Interaction]::InputBox(
"Podaj adres serwera DNS w formacie: serwer.domena.local`n`n⚠ UWAGA: Skrypt musi być uruchomiony na komputerze z zainstalowaną przystawką RSAT: DNS!`n`n ⚠ UWAGA: Skrypt otwiera nowe interaktywne okno dla każdej zony!",
"Wprowadź adres DNS",
"serwer.domena.local"
)
# Ustawienie okna na pierwszym planie po zamknięciu InputBox
$process = Get-Process | Where-Object { $_.MainWindowTitle -match "Wprowadź adres DNS" }
if ($process) {
[WinAPI]::SetForegroundWindow($process.MainWindowHandle)
}
# Jeśli użytkownik nic nie wpisał i kliknął "Anuluj", skrypt się zatrzyma
if (-not $DnsServer) {
Write-Host "Nie podano adresu serwera DNS. Skrypt zostanie zakończony." -ForegroundColor Red
exit
}
# Pobranie stref DNS z serwera
$Zones = @(Get-DnsServerZone -ComputerName $DnsServer)
ForEach ($Zone in $Zones) {
Write-Host "`n$($Zone.ZoneName)" -ForegroundColor "Green"
# Pobranie rekordów DNS w strefie
$records = Get-DnsServerResourceRecord -ComputerName $DnsServer -ZoneName $Zone.ZoneName
if ($records) {
# Wymuszenie oczekiwania na zamknięcie Out-GridView przed otwarciem kolejnego
$records | Out-GridView -Title "Rekordy DNS - $($Zone.ZoneName)" -PassThru | Out-Null
} else {
Write-Host "Brak rekordów w strefie $($Zone.ZoneName)" -ForegroundColor Yellow
}
}
Write-Host "Koniec działania skryptu." -ForegroundColor Cyan
Przykładowe użycie:
Pytanie o serwer DNS
Interaktywne okno z wynikami




