Helpers/ConvertFrom-ScriptConfigXml.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 |
<#
.SYNOPSIS Convert the XML file content to a hashtable containing the configuration. .EXAMPLE PS C:\> Get-Content -Path 'config.xml' | ConvertFrom-ScriptConfigXml Use the pipeline input to parse the XML file content. .NOTES Author : Claudio Spizzi License : MIT License .LINK https://github.com/claudiospizzi/ScriptConfig #> function ConvertFrom-ScriptConfigXml { [CmdletBinding()] param ( # An array of strings with the XML file content. [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [AllowEmptyString()] [System.String[]] $Content ) $config = @{} try { # Try to cast the content into an XmlDocument $xmlContent = [Xml] $Content # Extract all setting objects $settings = $xmlContent.Configuration.Settings.Setting foreach ($setting in $settings) { switch ($setting.Type) { # String 'string' { $config[$setting.Key] = $setting.Value } # Integer 'integer' { $config[$setting.Key] = [Int32]::Parse($setting.Value) } # Boolean 'boolean' { $config[$setting.Key] = 'True' -eq $setting.Value } # Array 'array' { $config[$setting.Key] = @() foreach ($item in $setting.Item) { $config[$setting.Key] += $item.Value } } # Hashtable 'hashtable' { $config[$setting.Key] = @{} foreach ($item in $setting.Item) { $config[$setting.Key][$item.Key] = $item.Value } } } } Write-Output $config } catch { throw "The XML configuration file content was in an invalid format: $_" } } |