Les tables de hashage de ConvertFrom-json avoir différent type de powershells intégré dans les tables de hashage, comment dois-je faire de même?

J'ai un fichier json (test.json) qui ressemble à quelque chose comme ceci:

{
    "root":
    {
        "key":"value"
    }
}

Je suis le chargement dans powershell en utilisant quelque chose comme ceci:

PS > $data = [System.String]::Join("", [System.IO.File]::ReadAllLines("test.json")) | ConvertFrom-Json

root
----
@{key=value}

J'aimerais être en mesure d'énumérer les clés de la "table de hachage" comme objet qui est défini par le fichier json. Donc, Idéalement, je voudrais être en mesure de faire quelque chose comme:

$data.root.Keys

et obtenir ["clé"]. Je peux le faire avec le haut-tables de hachage dans powershell, mais le faire avec une table de hachage chargé de json est moins évident.

Dans ce dépannage, j'ai remarqué que les champs retournés par ConvertFrom-json ont des types différents que ceux de Powershell de tables de hachage. Par exemple, un appel .GetType() sur un intégré dans la table de hachage fait montre qu'il est de type "table de hachage':

PS > $h = @{"a"=1;"b"=2;"c"=3}
PS > $h.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Hashtable                                System.Object

faire la même chose pour mon objet json rendements PSCustomObject:

PS > $data.root.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    PSCustomObject                           System.Object

Est-il possible de jeter ou de le transformer cet objet dans un typique powershell table de hachage?

J'ai vu ce lien (stackoverflow.com/questions/3740128/pscustomobject-to-hashtable) qui semble pertinent, mais n'a pas assez de travail pour moi.

OriginalL'auteur brad | 2014-02-25