private/helper/dns/Get-DnsDmarcRecord.ps1
function Get-DnsDmarcRecord { <# .SYNOPSIS Get DMARC record for domain. .DESCRIPTION Uses Google API to resolve DNS. .PARAMETER Domain Domain to resolve. .EXAMPLE # Get DMARC record for domain. Get-DnsDmarcRecord -Domain 'example.com'; #> [cmdletbinding()] param ( # Domain to lookup. [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)] [ValidateNotNullOrEmpty()] [string]$Domain ) BEGIN { # Get TXT records for domain. $txtRecords = Invoke-DnsRequest -Domain ('_dmarc.' + $Domain) -Type 'TXT' -ErrorAction SilentlyContinue; # Object array to store DMARC records. $dmarcRecords = New-Object System.Collections.ArrayList; } PROCESS { # Foreach TXT record. foreach ($txtRecord in $txtRecords) { # If the TXT record contains DMARC. if ($txtRecord.data -like 'v=DMARC1*') { # Write to log. Write-CustomLog -Category 'DNS' -Subcategory 'DMARC' -Message ("DMARC data for '{0}' is '{1}'" -f $Domain, $txtRecord.data) -Level Verbose; # Add to object array. $dmarcRecords += [PSCustomObject]@{ Domain = $Domain; Record = $txtRecord.data; }; } } } END { # Return DMARC records. return $dmarcRecords; } } |