tables - ¿Cómo pasas un hashtable a una función en powershell?
access hashtable powershell (2)
Al pasar una tabla hash a mi función powershell, se queja de que recibe un objeto. Esta es seguramente una pregunta noob, pero no entiendo por qué se comporta así.
Function ExtendHash(){
param(
[hashtable] $source,
[hashtable] $extender
)
...
}
y la persona que llama:
$hash1 = @{One = 1; Two = 2}
$hash2 = @{Two = 22; three = 3}
ExtendHash($hash1,$hash2)
No se puede convertir el valor de System.Object [] de tipo System.Object [] al tipo System.Collection.Hashtable
Entonces, ¿cómo hago este trabajo? Sugerencias?
Además, dime si me falta algo incorporado. Quiero el mismo patrón que el que usa javascript para extender las opciones predeterminadas (fusionar y anular los valores predeterminados).
(Junto a la respuesta de Roman :)
La persona que llama no necesita almacenar las tablas hash en variables y uno puede usar esto:
ExtendHash -source @{One = 1; Two = 2} -extender @{Two = 22; three = 3}
( -source
y -extender
son necesarios para que las -extender
hash no se interpreten como pares de valores-arg por sí ExtendHash
para ExtendHash
)
No use paréntesis y comas, esto es PowerShell (por ejemplo, los argumentos son similares a los argumentos de los comandos en CMD). Es decir, llama a tu función así:
ExtendHash $hash1 $hash2
En su caso, la expresión ($hash1,$hash2)
es una matriz de dos elementos y usted pasa esta matriz, un argumento, a la función. Tal llamada falla correctamente.
Si usa Set-StrictMode -Version 2
entonces este error "común" es detectado por PowerShell:
La función o comando fue llamado como si fuera un método. Los parámetros deben estar separados por espacios. Para obtener información sobre los parámetros, consulte el tema de Ayuda de about_Parameters.