Helpers/ConvertFrom-ScriptConfigJson.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 |
<#
.SYNOPSIS Convert the JSON file content to a hashtable containing the configuration. .EXAMPLE PS C:\> Get-Content -Path 'config.json' | ConvertFrom-ScriptConfigJson Use the pipeline input to parse the JSON file content. .NOTES Author : Claudio Spizzi License : MIT License .LINK https://github.com/claudiospizzi/ScriptConfig #> function ConvertFrom-ScriptConfigJson { [CmdletBinding()] param ( # An array of strings with the JSON file content. [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [AllowEmptyString()] [System.String[]] $Content ) $config = @{} try { # Join all lines into one string and parse the JSON content $jsonContent = ($Content -join '') | ConvertFrom-Json # Extract all propeties from the json content $jsonNodes = $jsonContent | Get-Member -MemberType NoteProperty foreach ($jsonNode in $jsonNodes) { $Key = $jsonNode.Name $value = $jsonContent.$Key if ($value -is [System.Management.Automation.PSCustomObject]) { $config[$Key] = @{} foreach ($property in $value.PSObject.Properties) { $config[$Key][$property.Name] = $property.Value } } else { $config[$Key] = $value } } Write-Output $config } catch { throw "The JSON configuration file content was in an invalid format: $_" } } |