Public/Get-IniContent.ps1

function Get-IniContent {
    <#
    .SYNOPSIS
        Функция для чтения INI-файлов
    .DESCRIPTION
        Данная функция считывает содержимое INI-файла и представляет данные в виде hash-таблицы
    .PARAMETER Path
        Путь к INI-файлу
    .EXAMPLE
        $vThunderBirdConfigPath = Join-Path -Path $([System.Environment]::GetFolderPath('ApplicationData')) -ChildPath 'Thunderbird\profiles.ini'
        Get-IniFile -Path $vThunderBirdConfigPath
    .NOTES
        Более подробно об этой идеи можно почитать тут: https://devblogs.microsoft.com/scripting/use-powershell-to-work-with-any-ini-file/
    #>

    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)]
        $Path
    )

    try {
        $Result = @{ }
        switch -regex -file $Path {
            “^\[(.+)\]” {
                # Section
                $section = $matches[1]
                $Result[$section] = @{ }
                $CommentCount = 0
            }
            “^(;.*)$” {
                # Comment
                $value = $matches[1]
                $CommentCount = $CommentCount + 1
                $name = “Comment” + $CommentCount
                $Result[$section][$name] = $value
            }
            “(.+?)\s*=(.*)” {
                # Key
                $name, $value = $matches[1..2]
                $Result[$section][$name] = $value
            }
        }
        return $Result
    }
    catch {
        #$PSCmdlet.ThrowTerminatingError($PSItem)
        Write-Error -Exception $PSItem.Exeception
    }
}