github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cloudconfig/windowsuserdatafiles/userdata.ps1 (about) 1 #ps1_sysnative 2 $ErrorActionPreference = "Stop" 3 $userdata=@" 4 %s 5 "@ 6 7 Function Decode-Base64 { 8 Param( 9 $inFile, 10 $outFile 11 ) 12 $bufferSize = 9000 # should be a multiplier of 4 13 $buffer = New-Object char[] $bufferSize 14 15 $reader = [System.IO.File]::OpenText($inFile) 16 $writer = [System.IO.File]::OpenWrite($outFile) 17 18 $bytesRead = 0 19 do 20 { 21 $bytesRead = $reader.Read($buffer, 0, $bufferSize); 22 $bytes = [Convert]::FromBase64CharArray($buffer, 0, $bytesRead); 23 $writer.Write($bytes, 0, $bytes.Length); 24 } while ($bytesRead -eq $bufferSize); 25 26 $reader.Dispose() 27 $writer.Dispose() 28 } 29 30 Function GUnZip-File { 31 Param( 32 $inFile, 33 $outFile 34 ) 35 $in = New-Object System.IO.FileStream $inFile, ([IO.FileMode]::Open), ([IO.FileAccess]::Read), ([IO.FileShare]::Read) 36 $out = New-Object System.IO.FileStream $outFile, ([IO.FileMode]::Create), ([IO.FileAccess]::Write), ([IO.FileShare]::None) 37 $gzipStream = New-Object System.IO.Compression.GZipStream $in, ([IO.Compression.CompressionMode]::Decompress) 38 $buffer = New-Object byte[](1024) 39 while($true){ 40 $read = $gzipstream.Read($buffer, 0, 1024) 41 if ($read -le 0){break} 42 $out.Write($buffer, 0, $read) 43 } 44 $gzipStream.Close() 45 $out.Close() 46 $in.Close() 47 } 48 49 $b64File = "$env:TEMP\juju\udata.b64" 50 $gzFile = "$env:TEMP\juju\udata.gz" 51 $udataScript = "$env:TEMP\juju\udata.ps1" 52 mkdir "$env:TEMP\juju" 53 54 Set-Content $b64File $userdata 55 Decode-Base64 -inFile $b64File -outFile $gzFile 56 GUnZip-File -inFile $gzFile -outFile $udataScript 57 58 & $udataScript 59 60 rm -Recurse "$env:TEMP\juju" 61