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