Public/ConvertFrom-Base64.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<#
    .SYNOPSIS
        Converts a base64 encoded string to a string.
 
    .DESCRIPTION
        Converts a base64 encoded string to a string.
 
    .PARAMETER Base64
        A Base64 Encoded String.
 
    .PARAMETER Encoding
        The encoding to use for conversion.
        Defaults to UTF8.
        Valid options are ASCII, BigEndianUnicode, Default, Unicode, UTF32, UTF7, and UTF8.
 
    .PARAMETER ToString
        Switch parameter to specify a conversion to a string object.
 
    .PARAMETER Decompress
        If supplied, the output will be decompressed using Gzip.
 
    .EXAMPLE
        ConvertFrom-Base64 -Base64 'QSBzdHJpbmc=' -ToString
 
        A string
 
    .EXAMPLE
        ConvertTo-Base64 -Base64 'A string','Another string' -ToString
 
        QSBzdHJpbmc=
        QW5vdGhlciBzdHJpbmc=
 
    .EXAMPLE
        'QSBzdHJpbmc=' | ConvertFrom-Base64 -ToString
 
        A string
 
    .EXAMPLE
        'QSBzdHJpbmc=','QW5vdGhlciBzdHJpbmc=' | ConvertFrom-Base64 -ToString
 
        A string
        Another string
 
    .OUTPUTS
        [String[]]
 
    .LINK
        http://convert.readthedocs.io/en/latest/functions/ConvertFrom-Base64/
#>

function ConvertFrom-Base64
{
    [CmdletBinding(HelpUri = 'http://convert.readthedocs.io/en/latest/functions/ConvertFrom-Base64/')]
    [OutputType('String')]
    param
    (
        [Parameter(
            Mandatory = $true,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true)]
        [ValidateNotNullOrEmpty()]
        [String[]]
        $Base64,

        [ValidateSet('ASCII', 'BigEndianUnicode', 'Default', 'Unicode', 'UTF32', 'UTF7', 'UTF8')]
        [String]
        $Encoding = 'UTF8',

        [Parameter(Mandatory = $false)]
        [Switch]
        $ToString,

        [Parameter(Mandatory = $false)]
        [Switch]
        $Decompress
    )

    begin
    {
        $userErrorActionPreference = $ErrorActionPreference
    }

    process
    {
        foreach ($b64 in $Base64)
        {
            try
            {
                $bytes = [System.Convert]::FromBase64String($b64)

                if ($ToString)
                {
                    if ($Decompress)
                    {
                        ConvertFrom-CompressedByteArrayToString -ByteArray $bytes -Encoding $Encoding
                    }
                    else
                    {
                        [System.Text.Encoding]::$Encoding.GetString($bytes)
                    }
                }
            }
            catch
            {
                Write-Error -ErrorRecord $_ -ErrorAction $userErrorActionPreference
            }
        }
    }
}