Private/Confirm-PSDVItemDataAttributes.ps1

function Confirm-PSDVItemDataAttributes {
    [CmdletBinding()]
    param(
        [Parameter()]
        [String]
        $Table,

        [Parameter()]
        [String]
        $EntitySet,

        [Parameter(Mandatory)]
        [System.Collections.Hashtable]
        $ItemData
    )

    if ([string]::IsNullOrWhiteSpace($Table)) {
        $entitySetLiteral = ConvertTo-PSDVODataStringLiteral -Value $EntitySet
        $Table = (Invoke-PSDVWebRequest -WebUri 'EntityDefinitions' -Filter "EntitySetName eq $entitySetLiteral" -Select 'LogicalName').LogicalName
    }

    $tableLiteral = ConvertTo-PSDVODataStringLiteral -Value $Table
    $tableColumns = Invoke-PSDVWebRequest -WebUri "EntityDefinitions(LogicalName=$tableLiteral)/Attributes"
    $attributeDetails = @{}
    $invalidAttributes = @()

    foreach ($attribute in $ItemData.Keys) {
        if ($tableColumns.LogicalName -notcontains $attribute) {
            $invalidAttributes += $attribute
        }
        else {
            $attributeDetails.Add($attribute, ($tableColumns | Where-Object { $_.LogicalName -eq $attribute } | Select-Object -Property AttributeType, SchemaName, Targets))
        }
    }

    if ($invalidAttributes.Count -gt 0) {
        throw "Invalid attributes not present in $Table : $($invalidAttributes -join ', ')"
    }

    return [PSCustomObject]@{
        Table            = $Table
        AttributeDetails = $attributeDetails
    }
}