Private/Convert-KeyValuePair.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
function Convert-KeyValuePair {
    param (
        [Parameter(Mandatory)]
        [System.Collections.Hashtable]
        $InputObject,
        [Parameter(Mandatory)]
        [String]
        [ValidateSet('String', 'Array', 'CSV', 'Object', 'JSON')]
        $OutputType,
        [Parameter(Mandatory)]
        [String]
        [ValidateSet('Name', 'Value', 'Both')]
        $OutputElements
    )
    if ($OutputType -eq 'Object' -and $OutputElements -ne 'Both') {
        Write-Warning 'Writing Output as an Object will always output both Keys (Names) and values'
    }

    try {
        switch ($OutputType) {
            Array {
                if ($OutputElements -ne 'Both') {
                    $OutputObject = $InputObject.GetEnumerator() | Select-Object $OutputElements
                } else {
                    $OutputObject = Format-Hashtable -HashtableIn $InputObject -KeyHeading Name -ValueHeading Value
                }
            }
            String {
                if ($OutputElements -ne 'Both') {
                    $OutputObject = ($EnvironmentVariables.GetEnumerator() | Select-Object -ExpandProperty $OutputElements) | Join-String -Separator ' '
                } else {
                    $OutputObject = Format-Hashtable -HashtableIn $InputObject -KeyHeading Name -ValueHeading Value -OutString
                }
            }
            CSV {
                if ($OutputElements -ne 'Both') {
                    $OutputObject = ($EnvironmentVariables.GetEnumerator() | Select-Object -ExpandProperty $OutputElements) | Join-String -Separator ', '
                } else {
                    $OutputObject = Format-Hashtable -HashtableIn $InputObject -KeyHeading Name -ValueHeading Value -OutCsv
                }
            }
            JSON {
                if ($OutputElements -ne 'Both') {
                    $OutputObject = ($EnvironmentVariables.GetEnumerator() | Select-Object -ExpandProperty $OutputElements) | ConvertTo-Json
                } else {
                    $OutputObject = Format-Hashtable -HashtableIn $InputObject -KeyHeading Name -ValueHeading Value -OutJson
                }
            }
            Object {
                $NewObjectProperties = New-Object -TypeName System.Collections.Hashtable @{ }
                foreach ($KeyValuePair in $EnvironmentVariables.GetEnumerator()) {
                    $NewObjectProperties += @{
                        $KeyValuePair.Key = $KeyValuePair.Value
                    }
                }
                $OutputObject = New-Object -TypeName PSCustomObject -Property $NewObjectProperties | Add-Member -Name ToString -MemberType ScriptMethod -Value { 'Name: {0}, Value: {1}' -f $this.Name,$this.Value } -Force -Passthru
            }
        }

        $OutputObject
    } catch {
        $ScriptName = $_.InvocationInfo.ScriptName
        $Position = 'In {2} At Line: {0} Char: {1}' -f $_.InvocationInfo.ScriptLineNumber, $_.InvocationInfo.OffsetInLine, $ScriptName
        $Category = $_.CategoryInfo.Category
        Write-Error -Message "Error was `"$_`"" -Category $Category -CategoryTargetName $Position
    }

}