Public/ConvertFrom-Ini.ps1

<#/*
 * @Author: Joseph Iannone
 * @Date: 2023-02-06 12:35:13
 * @Last Modified by: Joseph Iannone
 * @Last Modified time: 2023-02-07 16:14:38
 */#>


Function ConvertFrom-Ini {
    <#
    .SYNOPSIS
        Convert INI text to PSCustomObject
    
    .DESCRIPTION
        Convert INI text to PSCustomObject
        
    .PARAMETER InputObject
        A INI string to convert to PSCustomObject
    
    .EXAMPLE
        PS C:> $ini = "
        >> Language=Powershell
        >> Name=Joe
        >> [Address]
        >> ZIP=19147
        >> Street=123 Fitzwater Street
        >> State=Pennsylvania
        >> "
        PS C:> $obj = $ini | ConvertFrom-Ini
        PS C:> $obj


        Language Name Address
        -------- ---- -------
        Powershell Joe @{ZIP=19147; Street=123 Fitzwater Street; City=Philadelphia; State=Pennsylvania}


        PS C:> $obj.Name
        Joe
        PS C:> $obj.Address.Street
        123 Fitzwater Street

    .EXAMPLE
        PS C:> $obj1 = Get-Content .\Config.ini | ConvertFrom-Ini
        PS C:> $obj2 = Get-Content -Raw .\Config.ini | ConvertFrom-Ini
        PS C:> $obj3 = ConvertFrom-Ini -InputObject (Get-Content .\Config.ini)

    #>

    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    Param(
        [Parameter(Mandatory=$false, ValueFromPipeline=$true)][string]$InputObject
    )
    
    Begin {
        
        [System.Collections.ArrayList]$inputBuffer = [System.Collections.ArrayList]::new()

    }
    
    Process {
        
        [void]$inputBuffer.Add([string]$InputObject)
        
    }
    
    End {

        [string]$inputStr = $inputBuffer -join [Environment]::NewLine
        
        [PSCustomObject]$result = [ConvertIni.IniParser]::Parse($inputStr) 

        $result
        
    }
}