From cae193a3b3fca3821741ebb96b4952bc4c456f00 Mon Sep 17 00:00:00 2001 From: Dmitry Teselkin Date: Wed, 6 Mar 2013 19:29:35 +0400 Subject: [PATCH] Functions to work with Base64 strings added --- .../Modules/CoreFunctions/include/Base64.ps1 | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Deployment/WindowsPowerShell/Modules/CoreFunctions/include/Base64.ps1 diff --git a/Deployment/WindowsPowerShell/Modules/CoreFunctions/include/Base64.ps1 b/Deployment/WindowsPowerShell/Modules/CoreFunctions/include/Base64.ps1 new file mode 100644 index 0000000..50bb4cf --- /dev/null +++ b/Deployment/WindowsPowerShell/Modules/CoreFunctions/include/Base64.ps1 @@ -0,0 +1,99 @@ + +Function ConvertTo-Base64String { +<# +#> + [CmdletBinding(DefaultParameterSetName="FromString")] + param ( + [Parameter(Position=1,ParameterSetName="FromString")] + [String] $String, + + [Parameter(ParameterSetName="FromFile")] + [String] $Path, + + [Parameter(ParameterSetName="FromFile")] + [Int] $ChunkSize = 5KB, + + [Parameter(ParameterSetName="FromFile")] + [Switch] $OneChunk + ) + switch($PSCmdlet.ParameterSetName) { + "FromString" { + [System.Text.Encoding]::UTF8.GetBytes($String) + [System.Convert]::ToBase64String($Bytes) + } + "FromFile" { + $FileStream = [IO.File]::Open($Path, [System.IO.FileMode]::Open) + $BytesToRead = $FileStream.Length + + if ($OneChunk) { + $ChunkSize = $BytesToRead + } + + $Bytes = New-Object Byte[] $ChunkSize + while ($BytesToRead -gt 0) { + if ($BytesToRead -lt $ChunkSize) { + $ChunkSize = $BytesToRead + $Bytes = New-Object Byte[] $ChunkSize + } + #Write-Host ("BytesToRead: {0}, ChunkSize: {1}" -f $BytesToRead, $ChunkSize ) + $BytesRead = $FileStream.Read($Bytes, 0, $ChunkSize) + $BytesToRead -= $BytesRead + + [System.Convert]::ToBase64String($Bytes) + } + $FileStream.Close() + } + } +} + + + +Function ConvertFrom-Base64String { +<# +#> + [CmdletBinding(DefaultParameterSetName="ToByteArray")] + param ( + [Parameter(Position=1,ValueFromPipeline=$true)] + [String] $Base64String, + + [Parameter(ParameterSetName="ToFile")] + [String] $Path, + + [Parameter(ParameterSetName="ToString")] + [Switch] $ToString + ) + begin { + switch($PSCmdlet.ParameterSetName) { + "ToFile" { + if ([IO.File]::Exists($Path)) { + [IO.File]::Delete($Path) + } + $FileStream = [IO.File]::Open($Path, [IO.FileMode]::Append) + } + } + } + process { + foreach( $Line in ($Base64String -split '\n')) { + $Bytes = [System.Convert]::FromBase64String($Line) + + switch($PSCmdlet.ParameterSetName) { + "ToFile" { + $FileStream.Write($Bytes, 0, $Bytes.Length) + } + "ToString" { + [System.Text.Encoding]::UTF8.GetString($Bytes) + } + "ToByteArray" { + $Bytes + } + } + } + } + end { + switch($PSCmdlet.ParameterSetName) { + "ToFile" { + $FileStream.Close() + } + } + } +}