Как передать хеш-таблицу в функцию в 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, используемый для расширения параметров по умолчанию (объединение и переопределение значений по умолчанию).
Ответы
Ответ 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
)