private/Add-DetailProperty.ps1

function Add-DetailProperty {
    param(
        $obj,
        [string]   $name,
        [string]   $value,
        [string[]] $parts = @()
    )

    if ($parts.Count -gt 0) {
        $valueParts = $value -split ';' | ForEach-Object { $_.Trim() }
        $sub = [PSCustomObject]@{}
        for ($i = 0; $i -lt $parts.Count; $i++) {
            $v = if ($i -lt $valueParts.Count) { $valueParts[$i] } else { '' }
            $sub | Add-Member -NotePropertyName $parts[$i] -NotePropertyValue $v
        }
        $obj | Add-Member -NotePropertyName $name -NotePropertyValue $sub
    } elseif ($value -match ';') {
        $obj | Add-Member -NotePropertyName $name -NotePropertyValue (
            $value -split ';' | ForEach-Object { $_.Trim() }
        )
    } else {
        $obj | Add-Member -NotePropertyName $name -NotePropertyValue $value
    }
}