Вторая функция рабочая вполне. надо только названия поправить и бОльшую вложенность использовать. у вас там микс из ConvertFrom-Xml и ConvertFrom-Xml2
PS D:\> $s = '<?xml version="1.0" encoding="utf-8"?>
>> <Data>
>> <Card>
>> <Id>123</Id>
>> <CreateDate>2022-06-20T21:01:32.7727011+05:00</CreateDate>
>> <CardData>
>> <Id>456</Id>
>> <Value>789</Value>
>> <Ord>0</Ord>
>> </CardData>
>> </Card>
>> </Data>'
PS D:\> $xml = [xml]$s
PS D:\> function ConvertFrom-Xml2 {
>> param([parameter(Mandatory, ValueFromPipeline)] [System.Xml.XmlNode] $node)
>> process {
>> if ($node.DocumentElement) { $node = $node.DocumentElement }
>> $oht = [ordered] @{}
>> $name = $node.Name
>> if ($node.FirstChild -is [system.xml.xmltext]) {
>> $oht.$name = $node.FirstChild.InnerText
>> } else {
>> $oht.$name = New-Object System.Collections.ArrayList
>> foreach ($child in $node.ChildNodes) {
>> $null = $oht.$name.Add((ConvertFrom-Xml2 $child))
>> }
>> }
>> $oht
>> }
>> }
PS D:\> $xml | ConvertFrom-Xml2 | ConvertTo-Json -Depth 10
{
"Data": [
{
"Card": [
{
"Id": "123"
},
{
"CreateDate": "2022-06-20T21:01:32.7727011+05:00"
},
{
"CardData": [
{
"Id": "456"
},
{
"Value": "789"
},
{
"Ord": "0"
}
]
}
]
}
]
}
А вообще это всё потому что $xml - это не чистый PS объект, а XmlDocument