Public/ConvertFrom-Base64ToString.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
<#
    .SYNOPSIS
        Converts a base64 encoded string to a string.
 
    .DESCRIPTION
        Converts a base64 encoded string to a string.
 
    .PARAMETER String
        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 Decompress
        If supplied, the output will be decompressed using Gzip.
 
    .EXAMPLE
        ConvertFrom-Base64ToString -String 'QSBzdHJpbmc='
 
        A string
 
    .EXAMPLE
        ConvertTo-Base64 -String 'A string','Another string'
 
        QSBzdHJpbmc=
        QW5vdGhlciBzdHJpbmc=
 
    .EXAMPLE
        'QSBzdHJpbmc=' | ConvertFrom-Base64ToString
 
        A string
 
    .EXAMPLE
        'QSBzdHJpbmc=','QW5vdGhlciBzdHJpbmc=' | ConvertFrom-Base64ToString
 
        A string
        Another string
 
    .OUTPUTS
        [String[]]
 
    .LINK
        http://convert.readthedocs.io/en/latest/functions/ConvertFrom-Base64ToString/
#>

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

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

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

    begin
    {
        $userErrorActionPreference = $ErrorActionPreference
    }

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

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