如何将哈希表传递给PowerShell中的函数?
将哈希表传递给我的PowerShell函数时,它会抱怨它收到了一个对象如何将哈希表传递给PowerShell中的函数?,powershell,hashtable,Powershell,Hashtable,将哈希表传递给我的PowerShell函数时,它会抱怨它收到了一个对象 函数ExtendHash(){ param( [哈希表]$source, [哈希表]$extender ) ... } 打电话的人: $hash1=@{One=1;Two=2} $hash2=@{Two=22;Two=3} ExtendHash($hash1,$hash2) 无法将System.Object[]类型的System.Object[]值转换为System.Collection.Hashtable类型 那么,我
函数ExtendHash(){
param(
[哈希表]$source,
[哈希表]$extender
)
...
}
打电话的人:
$hash1=@{One=1;Two=2}
$hash2=@{Two=22;Two=3}
ExtendHash($hash1,$hash2)
无法将System.Object[]类型的System.Object[]值转换为System.Collection.Hashtable类型
那么,我如何使这项工作?建议
还有,我是否错过了一些内在的东西?我想要与JavaScript用于扩展默认选项(合并和覆盖默认值)的模式相同的模式。不要使用括号和逗号。这是PowerShell(例如,参数类似于CMD中命令的参数)。也就是说,按如下方式调用函数:
ExtendHash $hash1 $hash2
在本例中,表达式
($hash1,$hash2)
是一个包含两个项的数组,您可以将此数组(一个参数)传递给函数。这样的调用会正确地失败
如果使用
设置StrictMode-版本2
,则PowerShell会发现此“常见”错误:
调用函数或命令时,将其视为方法。参数
应该用空格隔开。有关参数的信息,请参见
“关于参数”帮助主题
(紧挨着:)调用者不需要将哈希表存储在变量中,也可以使用:
ExtendHash -source @{One = 1; Two = 2} -extender @{Two = 22; three = 3}
(
-source
和-extender
是必需的,这样哈希表本身就不会被ExtendHash
本身解释为arg值对)确实让我有点恼火,powershell使用了两个不同的语法,这两个语法对于类似的东西是直接相反的,即foo.SomeThing(a,b)
和有些东西a b
首先,PowerShell就是一个外壳。那么它也是一种编程语言。这个顺序是经过设计的。对于哈希表,你不应该使用分号而不是逗号吗?例如,@{One=1,Two=2}应该是@{One=1;Two=2}