new create powershell hashtable pscustomobject

new - create object powershell



PSCustomObject a Hashtable (4)

Aquí hay una versión que también funciona con hashtables / arrays anidados (que es útil si estás intentando hacer esto con DSC ConfigurationData):

function ConvertPSObjectToHashtable { param ( [Parameter(ValueFromPipeline)] $InputObject ) process { if ($null -eq $InputObject) { return $null } if ($InputObject -is [System.Collections.IEnumerable] -and $InputObject -isnot [string]) { $collection = @( foreach ($object in $InputObject) { ConvertPSObjectToHashtable $object } ) Write-Output -NoEnumerate $collection } elseif ($InputObject -is [psobject]) { $hash = @{} foreach ($property in $InputObject.PSObject.Properties) { $hash[$property.Name] = ConvertPSObjectToHashtable $property.Value } $hash } else { $InputObject } } }

¿Cuál es la forma más fácil de convertir un PSCustomObject en una Hashtable ? Se muestra como uno con el operador de splat, llaves y lo que parecen ser pares de valores clave. Cuando intento [Hashtable] a [Hashtable] , no funciona. También probé .toString() y la variable asignada dice que es una cadena pero no muestra nada, ¿alguna idea?


Esto funciona para PSCustomObjects creados por ConvertFrom_Json.

Function ConvertConvertFrom-JsonPSCustomObjectToHash($obj) { $hash = @{} $obj | Get-Member -MemberType Properties | SELECT -exp "Name" | % { $hash[$_] = ($obj | SELECT -exp $_) } $hash }

Descargo de responsabilidad: Apenas entiendo PowerShell por lo que probablemente no sea tan limpio como podría ser. Pero funciona (solo para un nivel).


Keith ya te dio la respuesta, esta es solo otra forma de hacer lo mismo con un juego de una sola línea:

$psobject.psobject.properties | foreach -begin {$h=@{}} -process {$h."$($_.Name)" = $_.Value} -end {$h}


No debería ser demasiado difícil. Algo como esto debería hacer el truco:

# Create a PSCustomObject (ironically using a hashtable) $ht1 = @{ A = ''a''; B = ''b''; DateTime = Get-Date } $theObject = new-object psobject -Property $ht1 # Convert the PSCustomObject back to a hashtable $ht2 = @{} $theObject.psobject.properties | Foreach { $ht2[$_.Name] = $_.Value }