将哈希传递给 Powershell 函数问题 [英] Passing Hashes to a Powershell function problem

查看:47
本文介绍了将哈希传递给 Powershell 函数问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一定是遗漏了什么.我必须变量:$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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆