Как передать хэш-таблицу функции в 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
)