Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将哈希表传递给PowerShell中的函数?_Powershell_Hashtable - Fatal编程技术网

如何将哈希表传递给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类型 那么,我

将哈希表传递给我的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类型

那么,我如何使这项工作?建议


还有,我是否错过了一些内在的东西?我想要与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}