将哈希传递给 Powershell 函数问题 [英] Passing Hashes to a Powershell function problem
问题描述
我一定是遗漏了什么.我必须变量:$var1 和 $var2
I must be missing something. i have to variables: $var1 and $var2
$var1 | gm
TypeName: System.Collections.Hashtable
每个都有IP和Port属性,例如$var1[0].ip = '1.1.1.1';$var1[0].ports = @(22,23,24)
Each of them has IP and Port property, for example $var1[0].ip = '1.1.1.1'; $var1[0].ports = @(22,23,24)
现在我想创建一个函数,在这两个对象之间进行一些比较:
Now I want to create a function that does some comparing between those 2 objects:
Function CompareData ($data1,$data2){
$data1 | gm #this is just for me to test whats wrong
write-host "first data $data1.ip" #just for me
write-host "Second data $data2.ip" #just for me
$str =''
#check each ip in data2 if it exists in data1
#if it exists, start checking for ports
#if not exists do bla bla
For ($i=0; $i -lt $data2.count; $i++){
$ip = $data2[$i].ip
for ($j=0; $j -lt $data1.count; $j++){
if ($data1[$j].ip -eq $ip){
$str += "$ip`r`n"
$str += "Base ports: $data1[$i].ports`r`n"
$str += "Current ports: $data2[$j].ports`r`n"
}
}
}
}
函数还没有准备好,我想知道的是为什么我在传递 $var1 和 $var2 时遇到问题我这样做:
the function isnt ready, what i do want to know is why im having a problem passing $var1 and $var2 Im doing this:
CompareData ($var1, $var2)
而且看起来只有 $var1 正在传递而 $var2 是空的,如果我这样做(在函数内部):
and it looks like only $var1 is passing while $var2 comes empty, also, if i do (inside function):
$data1 | gm
System.Object[] System.Object[].ip
意思是函数没有按照我的意愿获取变量.我在这里错过了什么?
meaning the function isnt getting the variables as i want. what am i missing here?
推荐答案
当您使用括号时,PowerShell 会构造一个包含其中所有值的数组,并将其用作 one 参数的值.
When you use parentheses, PowerShell constructs an array with all the values in it, and uses that as the value for one parameter.
所以,CompareData ($var1, $var2)
等价于 CompareData -data1 @($var1, $var2)
没有为 指定值-data2
参数.
So, CompareData ($var1, $var2)
is equivalent to CompareData -data1 @($var1, $var2)
with no value specified for the -data2
parameter.
如果您按照@dwillits 的建议使用 CompareData -data1 $var1 -data2 $var2
,您应该会得到您期望的结果.
If you use CompareData -data1 $var1 -data2 $var2
as suggested by @dwillits you should get the result you expect.
这篇关于将哈希传递给 Powershell 函数问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!