Передача хэшей в функцию Powershell - PullRequest
0 голосов
/ 06 августа 2020

Я, должно быть, что-то упускаю. У меня есть переменные: $ 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 ]

2 голосов
/ 06 августа 2020

Когда вы используете круглые скобки, PowerShell создает массив со всеми значениями в нем и использует его в качестве значения для одного параметра.

Итак, CompareData ($var1, $var2) эквивалентно CompareData -data1 @($var1, $var2) без значения, указанного для параметра -data2.

Если вы используете CompareData -data1 $var1 -data2 $var2, как предлагает @dwillits, вы должны получить ожидаемый результат.

1 голос
/ 06 августа 2020

У меня были проблемы с моими функциями при их вызове со скобками. Вы пробовали так вызывать свою функцию?

    CompareData -data1 $var1 -data2 $var2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...