top of page
Writer's pictureAvijit Dutta

PowerShell to export the DNS details from DHCP Scope

Updated: Sep 21, 2022

Article No :: KB00001



Dear All - Below PS Script will fetch the DNS information configured in Scope options or Server Options and send the details over mail. It will fetch max 3 DNS configured in the Scope or server option.



Note: Please test the script in the test environment, before executing in the production environment. I have downloaded the script from the internet and modified the same as per my need and environment.


 

##########################################################################
# Name: Avijit Dutta                                                      
# ScriptName :   Get-DHCPScopeOption-DNS
# Purpose : This script will fetch the DNS configured in the Scope Option or Server Option.# 
# Creation Date : 01-01-2016                    # 
# Note: Taken a reference from Microsoft Script Center and modified as per our enviroment  # 
############################################################################################ 
 
############################################################################################ 
# Prerequsites                                                                             # 
# 1) Create below folder hierarchy                                                         # 
#          DHCP_DNS_Info                                                                   # 
#                01_Report                                                                 # 
#                02_BackupLocation                                                         #         
#                03_03_ZIP_Report                                                          # 
# 2) SMTP Server                                                                           # 
# 3) Recipient email address.                                                              # 
############################################################################################ 
 
Import-Module DHCPServer 
# Get all Authorized DCs from AD configuration with below command. But, I have mentioned them manually. 
# $DHCPs = Get-DhcpServerInDC 
 
# Manually, mentioned the DHCP Server list  
$DHCPs = 'Server1','Server2','Server3','Server4' 
 
# Path and Filename of the Exported data 
$Filename = "E:\Script\DHCP_DNS_Info\01_Report\DHCPScopes_DNS_$(get-date -Uformat "%Y%m%d-%H%M%S").csv" 
 
$Report = @() 
$k = $null 
Write-Host -foregroundcolor Green "`n`n`n`n`n`n`n`n`n" 
foreach ($dhcp in $DHCPs) { 
    $k++ 
    Write-Progress -activity "Getting DHCP scopes:" -status "Percent Done: " ` 
    -PercentComplete (($k / $DHCPs.Count)  * 100) -CurrentOperation "Now processing $($dhcp)" 
    $scopes = $null 
    $scopes = (Get-DhcpServerv4Scope -ComputerName $dhcp -ErrorAction:SilentlyContinue) 
    If ($scopes -ne $null) { 
        #getting global DNS settings, in case scopes are configured to inherit these settings 
        $GlobalDNSList = $null 
        $GlobalDNSList = (Get-DhcpServerv4OptionValue -OptionId 6 -ComputerName $dhcp -ErrorAction:SilentlyContinue).Value 
        $scopes | % { 
            $row = "" | select Hostname,ScopeID,SubnetMask,Name,State,StartRange,EndRange,LeaseDuration,Description,DNS1,DNS2,DNS3,GDNS1,GDNS2,GDNS3 
            $row.Hostname = $dhcp 
            $row.ScopeID = $_.ScopeID 
            $row.SubnetMask = $_.SubnetMask 
            $row.Name = $_.Name 
            $row.State = $_.State 
            $row.StartRange = $_.StartRange 
            $row.EndRange = $_.EndRange 
            $row.LeaseDuration = $_.LeaseDuration 
            $row.Description = $_.Description 
            $ScopeDNSList = $null 
            $ScopeDNSList = (Get-DhcpServerv4OptionValue -OptionId 6 -ScopeID $_.ScopeId -ComputerName $dhcp -ErrorAction:SilentlyContinue).Value 
            #write-host "Q: Use global scopes?: A: $(($ScopeDNSList -eq $null) -and ($GlobalDNSList -ne $null))" 
            If (($ScopeDNSList -eq $null) -and ($GlobalDNSList -ne $null)) { 
                $row.GDNS1 = $GlobalDNSList[0] 
                $row.GDNS2 = $GlobalDNSList[1] 
                $row.GDNS3 = $GlobalDNSList[2] 
                $row.DNS1 = $GlobalDNSList[0] 
                $row.DNS2 = $GlobalDNSList[1] 
                $row.DNS3 = $GlobalDNSList[2] 
                } 
            Else { 
                $row.DNS1 = $ScopeDNSList[0] 
                $row.DNS2 = $ScopeDNSList[1] 
                $row.DNS3 = $ScopeDNSList[2] 
                } 
            $Report += $row 
            } 
        } 
    Else { 
        write-host -foregroundcolor Yellow """$($dhcp)"" is either running Windows 2003, or is somehow not responding to querries. Adding to report as blank" 
        $row = "" | select Hostname,ScopeID,SubnetMask,Name,State,StartRange,EndRange,LeaseDuration,Description,DNS1,DNS2,DNS3,GDNS1,GDNS2,GDNS3 
        $row.Hostname = $dhcp 
        $Report += $row 
        } 
    write-host -foregroundcolor Green "Done Processing ""$($dhcp)""" 
    } 
  
$Report  | Export-csv -NoTypeInformation -UseCulture $filename 
 
##################################################################  
# Now, We will zip the export file and send the same over email. # 
################################################################## 
 
#Below command will copy the file from 01_Report folder to Backup Location. 
 
Copy-Item -Path $OutputFile -Destination "E:\Script\DHCP_DNS_Info\02_BackupLocation" 
 
## Below Code is to ZIP the folder ## 
$ZIPSource = "E:\Script\DHCP_DNS_Info\02_BackupLocation" 
$ZIPDestination = "E:\Script\DHCP_DNS_Info\03_ZIP_Report\DHCP_Stat_$(get-date -f yyyy-MM-dd-HHmm).zip" 
If(Test-path $ZIPDestination) {Remove-item $ZIPDestination} 
Add-Type -assembly "system.io.compression.filesystem" 
[io.compression.zipfile]::CreateFromDirectory($ZIPSource, $ZIPDestination)  
 
################################## 
# SMTP Settings for Email Report # 
################################## 
# "From" email address 
 
$EmailFrom = "Report@abc.com" 
 
# "To" email address 
$EmailTo1 = "TOrecipient1@abc.com" 
$EmailTo2 = "TOrecipient2@abc.com" 
#$EmailTo3 = "TOrecipient3@abc.com" 
#$EmailTo4 = "TOrecipient4@abc.com" 
#$EmailTo5 = "TOrecipient5@abc.com" 
 
# "CC" email address 
$EmailCC = "CCrecipient1@abc.com" 
 
# Subject of the email 
$EmailSubject = "DHCP Scope Information :: Dated :: $(get-date -f yyyy-MM-dd)"  
 
# Body of the email 
$EmailBody = @" 
<html> 
<body style="font-family: Arial; font-size: 11pt;"> 
Dear All,<br></br> 
    Please find attached DHCP Scope information - Dated :: $(get-date -f yyyy-MM-dd).<br></br> 
<br></br> 
Regards,<br> 
Server Admin</br> 
</body> 
</html> 
<br></br> 
 
"@ 
$attachment = $ZIPDestination 
$SMTPServer = "smtp.exchangeserver.com" 
$SMTPPort = "25" 
 
$Message = New-Object System.Net.Mail.MailMessage 
$Message.From = $EmailFrom 
$Message.To.Add($EmailTo1) 
$Message.To.Add($EmailTo2) 
#$Message.To.Add($EmailTo3) 
#$Message.To.Add($EmailTo4) 
#$Message.To.Add($EmailTo5) 
 
#$Message.CC.Add($EmailCC) 
$Message.Body = $EmailBody 
$message.Subject = $EmailSubject 
$attach = new-object Net.Mail.Attachment($attachment) 
$message.Attachments.Add($attach) 
$message.IsBodyHTML = $true 
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, $SMTPPort) 
$SMTPClient.Send($Message) 
$Message.dispose() 
 
# Below command with delete the extra file from Backup Location. 
 
Get-ChildItem “E:\Script\DHCP_DNS_Info\02_BackupLocation” -recurse -include *.htm -force | remove-item
 

If you liked this article, do share the same. You can also Buy me a Coffee using Paypal at "paypal.me/duttaavijit", This is purely a volunteer effort. THANK YOU !!!




5,701 views0 comments

Recent Posts

See All

Comments


bottom of page