Почему нельзя получить Hashtable прямо из функции PowerShell?

... или что я делаю не так?

function GetHashtableFromJsonText {
  [OutputType([System.Collections.Hashtable])]
  param (
    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [string]$JsonString
  )
  $table
  try {
    $table = (ConvertFrom-Json -InputObject $JsonString -AsHashtable -Depth 3)
  }
  catch {
    return $null
  }
  return ($table -is [System.Collections.Hashtable]) ? $table : $null
}

# Пробую привести JSON к Hashtable
$jsonText = '{ "foo": 123 }'

Write-Host "---1---"
$ht = GetHashtableFromJsonText -JsonString $jsonText
Write-Host "PSTypeNames: $($ht.PSTypeNames)"
Write-Host "`$ht.GetType().FullName: $($ht.GetType().FullName)"
# PSTypeNames: System.Object[] System.Array System.Object
# $ht.GetType().FullName: System.Object[] ◀ ◀ ◀ ◀ ◀

Write-Host "---2---"
# Пробую так и наконец получаю Hashtable               ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
$ht = GetHashtableFromJsonText -JsonString $jsonText | Group-Object -AsHashTable
Write-Host "PSTypeNames: $($ht.PSTypeNames)"
Write-Host "`$ht.GetType().FullName: $($ht.GetType().FullName)"
# PSTypeNames: System.Collections.Hashtable System.Object
# $ht.GetType().FullName: System.Collections.Hashtable ◀ ◀ ◀ ◀ ◀

Playground PS

Почему в первом варианте(без Group-Object) возвращается System.Object[], ведь внутри функции - это явно Hashtable, но в переменную, по какой-то причине, попадает не то что ожидается?


Ответы (0 шт):