Как передать хэш-таблицу функции в powershell?

при передаче хэш-таблицы в мою функцию powershell она жалуется, что получает объект. Это, конечно, вопрос noob, но я не нахожу, почему он ведет себя так.

Function ExtendHash(){
  param(
    [hashtable] $source,
    [hashtable] $extender
  )
  ...
}

и абонента:

$hash1 = @{One = 1; Two = 2}
$hash2 = @{Two = 22; three = 3}
ExtendHash($hash1,$hash2)

не удается преобразовать систему.Object[] значение типа System.Объект[] для ввода System.Коллекция.Хеш -

Так как мне сделать эту работу? Предложения?
Кроме того, скажите мне, если я пропал что-то встроенное. Я хочу тот же шаблон, что и javascript для расширения параметров по умолчанию (слияние и переопределение значений по умолчанию).

2 ответов


не используйте скобки и запятые, это PowerShell (скажем, аргументы похожи на аргументы команд в CMD). То есть, назовите свою функцию так:

ExtendHash $hash1 $hash2

в вашем случае выражение ($hash1,$hash2) - это массив из двух элементов, и вы передаете этот массив, один аргумент, функция. Такой вызов не выполняется правильно.


Если вы используете Set-StrictMode -Version 2 тогда эта "распространенная" ошибка caugt с помощью PowerShell:

функция или команда была называют как способ. Параметры должны быть разделены пробелами. Сведения о параметрах см. В разделе раздел справки about_Parameters.


(рядом с Роман:)
Вызывающему абоненту не нужно хранить хэш-таблицы в переменных, и тогда можно также использовать это:

ExtendHash  -source @{One = 1; Two = 2}  -extender @{Two = 22; three = 3}

(-source и -extender необходимы, чтобы сами хэш-таблицы не интерпретировались как arg-value-pairs сами по себе для ExtendHash)