Types/OpenPackage.Part/ReadFormData.ps1

<#
.SYNOPSIS
    Reads Part Content as Form Data
.DESCRIPTION
    Reads OpenPackage Part Content as Form Data
#>

[Reflection.AssemblyMetadata(
    'ContentTypePattern', 
    '[/\+]x-www-form-urlencoded'
)]
param(
    # An optional input object
    # If provided, content will be read from this object.
    # If not provided, content will be read from this part.
    [Alias('Input')]
    [PSObject]$InputObject = $null,
 
    # Any options used to read the data.
    [Alias('Options')]
    [Collections.IDictionary]$Option = [Ordered]@{}
)
if (-not $this.ReadText) { return }


$partText = $this.ReadText($InputObject, $Option)

$formData = [Web.HttpUtility]::ParseQueryString($partText)
$formDataObject = [Ordered]@{}
foreach ($key in $formData.Keys) {
    if ($null -eq $formDataObject[$key]) {
        $formDataObject[$key] = $formData[$key]
    } else {
        $formDataObject[$key] = @($formDataObject[$key]) + $formData[$key]
    }                           
}
return $formDataObject