Private/ConvertTo-PSCustomWithCapitalizedKeys.ps1

function ConvertTo-PSCustomWithCapitalizedKeys {
    <#
    .SYNOPSIS
        Converts a collection of hashtables or objects into [PSCustomObject]s with capitalized property names.
 
    .DESCRIPTION
        This function is useful for reformatting REST API responses into consistent PowerShell objects
        with standardized property names (first letter capitalized).
 
    .PARAMETER InputObject
        The collection of hashtables or objects to transform.
 
    .EXAMPLE
        ConvertTo-PSCustomWithCapitalizedKeys -InputObject $response.value
 
    .OUTPUTS
        [PSCustomObject[]] with capitalized property names
 
    .NOTES
        Author: Lakshmanachari Panuganti
        Date : 2 August 2025: Initial Development
 
    .LINK
        https://www.powershellgallery.com/packages/OMG.PSUtilities.AzureDevOps
        https://github.com/lakshmanachari-panuganti
        https://www.linkedin.com/in/lakshmanachari-panuganti/
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory, ValueFromPipeline)]
        [object[]]$InputObject
    )

    process {
        foreach ($item in $InputObject) {
            $obj = @{}

            foreach ($property in $item.PSObject.Properties) {
                $originalName = $property.Name
                $capitalizedName = if ($originalName.Length -gt 1) {
                    ($originalName[0].ToString().ToUpper()) + ($originalName.Substring(1))
                } else {
                    $originalName.ToUpper()
                }

                $obj[$capitalizedName] = $property.Value
            }

            [PSCustomObject]$obj
        }
    }
}