Private/ConvertFrom-IniFile.ps1

function ConvertFrom-IniFile {
    <#
        .SYNOPSIS
            Converts content from a INI file into a hashtable
            Source: https://devblogs.microsoft.com/scripting/use-powershell-to-work-with-any-ini-file/
    #>

    [OutputType([System.Collections.Hashtable])]
    [CmdletBinding(SupportsShouldProcess = $False)]
    param (
        [Parameter(Mandatory = $True, Position = 0, ValueFromPipeline)]
        $InputObject
    )

    try {
        $TempFile = New-TemporaryFile -WhatIf:$WhatIfPreference
        Out-File -FilePath $TempFile -InputObject $InputObject
        Write-Verbose -Message "$($MyInvocation.MyCommand): Write INI content to: $TempFile."
    }
    catch {
        throw $_
    }

    try {
        $Ini = @{}
        Write-Verbose -Message "$($MyInvocation.MyCommand): Convert INI content from: $TempFile."
        switch -Regex -File $TempFile {
            "^\[(.+)\]" {
                # Section
                $Section = $matches[1]
                $Ini[$Section] = @{}
                $CommentCount = 0
            }
            "^(;.*)$" {
                # Comment
                $Value = $matches[1]
                $CommentCount = $CommentCount + 1
                $Name = "Comment" + $CommentCount
                $Ini[$Section][$Name] = $Value
            }
            "(.+?)\s*=(.*)" {
                # Key
                $Name, $Value = $matches[1..2]
                $Ini[$Section][$Name] = $Value
            }
        }
        return $Ini
    }
    catch {
        throw $_
    }
    finally {
        Write-Verbose -Message "$($MyInvocation.MyCommand): Delete $TempFile."
        Remove-Item -Path $TempFile -ErrorAction "SilentlyContinue" -WarningAction "SilentlyContinue"
    }
}