我一定很想念东西。我必须变量: $ var1和$ var2
$var1 | gm
TypeName: System.Collections.Hashtable
它们每个都有IP和Port属性,例如$ var1 [0] .ip ='1.1.1.1'; $ var1 [0] .ports = @(22,23,24)
现在,我想创建一个在这两个对象之间进行比较的函数:
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时遇到问题 我正在这样做:
CompareData ($var1, $var2)
而且,好像只有$ var1在传递,而$ var2为空,如果我这样做(内部函数):
$data1 | gm
System.Object[] System.Object[].ip
表示该函数没有获取我想要的变量。我在这里想念什么?
答案 0 :(得分:2)
使用括号时,PowerShell构造一个包含所有值的数组,并将其用作 one 参数的值。
因此,CompareData ($var1, $var2)
等效于CompareData -data1 @($var1, $var2)
,但没有为-data2
参数指定值。
如果按照@dwillits的建议使用CompareData -data1 $var1 -data2 $var2
,则应获得预期的结果。
答案 1 :(得分:1)
用括号调用函数时,我遇到了问题。您是否尝试过像这样调用函数?
let