¿Cuál es la forma más fácil de convertir un PSCustomObject
en un Hashtable
? Se muestra como uno con el operador de splat, llaves y lo que parecen ser pares de valores clave. Cuando intento enviarlo a [Hashtable]
, no funciona. También probé .toString()
y la variable asignada dice que es una cadena pero no muestra nada, ¿alguna idea?PSCustomObject a Hashtable
Respuesta
No debería ser demasiado difícil. Algo como esto debe 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 }
Tenga en cuenta que '$ _. Name' ya está una cadena, por lo que '$ ht2 [$ _. Name]' o '$ h. ($ _. Name)' funcionará tan bien como '" $ ($ _. Name) "'. –
Tienes razón. Fue una secuencia de comandos descuidada de mi parte. :-) –
Tenga en cuenta que esto no funciona para PSCustomObjects creados por 'ConvertFrom-Json'. [Esta pregunta] (http://stackoverflow.com/q/22002748/310446) resuelve ese problema. – BenV
Keith ya le dio la respuesta, esto es sólo otra forma de hacer lo mismo con una sola línea:
$psobject.psobject.properties | foreach -begin {[email protected]{}} -process {$h."$($_.Name)" = $_.Value} -end {$h}
Heh, comenzó con algo muy similar, excepto que fue lo suficientemente largo como para invocar la barra de desplazamiento horizontal SO. Por cierto, creo que tus '$ 's' faltan algunos' _'s'. :-) –
Eso es lo que estaba tratando de evitar y finalmente se tragó el signo de subrayado. ¡Gracias! –
@ShayLevy: ¿Cuál es la ventaja de poner todo en la misma línea? – Rubanov
Esto funciona para PSCustomObjects creadas 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).
Poco más limpio (puede ser más difícil de entender) '$ hash = @ {}; $ obj | Get-Member -MemberType Properties | foreach {$ hash.Add ($ _. Name, $ obj. ($ _. Name))} ' – Adarsha
Aquí hay una versión que funciona con anidadas tablas hash/matrices, así (que es útil si usted está tratando de 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
}
}
}
Esta es la única versión que funcionó para mis datos con objetos y matrices anidados de varios niveles. –
Solución excelente y elegante para los objetos anidados multinivel. –
- 1. ¿hashtable de actualización por otra hashtable?
- 2. Hashtable Hashtable evitar el hashcode negativo
- 3. convertir HashTable a Dictionary en C#
- 4. Hashtable similar a V8 para C#?
- 5. Hashtable para cadena XML y de nuevo a HashTable sin utilizar .NET Serializador
- 6. Diferencias entre .Net Hashtable, Java Hashtable y HashMap
- 7. Cuándo utilizar un HashTable
- 8. Hashtable en C++?
- 9. Ventajas de HashTable
- 10. Hashtable vs Dictionary
- 11. Implementación de Hashtable
- 12. Apache Velocity: hashtable?
- 13. cmd.exe powershell HashTable
- 14. Dictionary/HashTable Object in C++?
- 15. cómo serializar hashtable en C#
- 16. Enum como clave de HashTable
- 17. ConcurrentHashMap y Hashtable en Java
- 18. .Net Hashtable - Contiene vs ContainsKey
- 19. Implementación de Hashtable para C
- 20. Diferencia entre diccionario y Hashtable
- 21. ¿Cuánta memoria usa una Hashtable?
- 22. Cómo convertir Diccionario <> a Hashtable en C#?
- 23. Hashtable de variable mutable en Ocaml
- 24. Hashtable con clave multidimensional en C#
- 25. Crear Hashtable como final en java
- 26. Diferencia entre Hashtable y Collections.synchronizedMap (HashMap)
- 27. Hashmap y hashtable en el entorno multiproceso
- 28. Hashtable to Dictionary <> syncroot.
- 29. Diccionario vs uso de memoria Hashtable
- 30. ¿Es Hashtable apropiado para almacenar activos?
PSCustomObjects tienen ventajas sobre las tablas hash. Piensa dos veces antes de convertirlo. http://stackoverflow.com/questions/22002748/hashtables-from-convertfrom-json-have-different-type-from-powershells-built-in-h/22010290#22010290 – spuder