tables powershell hashtable

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.