Подтвердить что ты не робот

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

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

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

И звонящий

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

Не удается преобразовать значение System.Object [] типа System.Object [] в тип System.Collection.Hashtable

Так как мне сделать эту работу? Предложения?

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

4b9b3361

Ответ 1

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

ExtendHash $hash1 $hash2

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


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

Функция или команда вызывались так, как если бы это был метод. Параметры должны быть разделены пробелами. Для получения информации о параметрах см. Раздел справки about_Parameters.

Ответ 2

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

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

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