将哈希传递给Powershell函数问题

时间:2020-08-06 16:32:32

标签: windows function powershell

我一定很想念东西。我必须变量: $ 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

表示该函数没有获取我想要的变量。我在这里想念什么?

2 个答案:

答案 0 :(得分:2)

使用括号时,PowerShell构造一个包含所有值的数组,并将其用作 one 参数的值。

因此,CompareData ($var1, $var2)等效于CompareData -data1 @($var1, $var2),但没有为-data2参数指定值。

如果按照@dwillits的建议使用CompareData -data1 $var1 -data2 $var2,则应获得预期的结果。

答案 1 :(得分:1)

用括号调用函数时,我遇到了问题。您是否尝试过像这样调用函数?

let