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