I recently have a task to review the DNS settings for more than 100 Windows servers in the same domain. I drafted a simple PowerShell script to perform the Windows DNS checking and export all the server DNS configuration into a CSV file.
#This is a PowerShell Script to check the DNS settings for the servers from a given CSV file #Example: CheckDNSSetting.ps1 -i serverlist.csv #Reference: https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-networkadapterconfiguration param ( [alias("i")] [string]$inputfile = $(read-host -Prompt "Enter the full path to the list of the CSV input file") ) #Initialized the output file $TimeStamp1 = $(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ")) $output = "C:\temp\ExportedDNSSetting$TimeStamp1.csv" Write-Host "--->Generating the new output file now...... $output " New-Item -Path $output -ItemType File > $null Add-Content -Path $output -Value '"Hostname","Adapter Index","IP Address","DNSServerSetting"' #Generate the DNS settings output Import-Csv $inputfile | foreach { $AdapaterSettings = Get-wmiobject -ClassName Win32_NetworkAdapterConfiguration -ComputerName $_.hostname -ErrorAction SilentlyContinue if($AdapaterSettings -eq $null) { Write-Host "--->Collect the DNS Configuration Failed for server -" $_.hostname -ForegroundColor Red $NewLine = "{0},{1},{2},{3}" ` -f $_.hostname,` $null,` $null,` "This server cannot be connected!!!" $NewLine | Add-Content -Path $output }else { Write-Host "--->Collect the DNS Configuration successfully for server -" $_.hostname -ForegroundColor Green Foreach ($ThisAdapaterSetting in $AdapaterSettings) { $NewLine = "{0},{1},{2},{3}" ` -f $_.hostname,` $ThisAdapaterSetting.Index,` [string]$ThisAdapaterSetting.IPAddress,` [string]$ThisAdapaterSetting.DNSServerSearchOrder $NewLine | Add-Content -Path $output } } } Write-Host "--->Data Collection is completed, the result is at $output"
The example is as below:

The example result CSV file is as below:
