簡體   English   中英

將哈希傳遞給 Powershell function 問題

[英]Passing Hashes to a Powershell function problem

我肯定錯過了什么。 我必須變量:$var1 和 $var2

$var1 | gm 
 TypeName: System.Collections.Hashtable

他們每個人都有 IP 和 Port 屬性,例如 $var1[0].ip = '1.1.1.1'; $var1[0].ports = @(22,23,24)

現在我想創建一個 function 來比較這兩個對象:

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"
            }
        }
    }
}

function 還沒有准備好,我想知道的是為什么我在傳遞 $var1 和 $var2 時遇到問題我這樣做:

CompareData ($var1, $var2)

並且看起來只有 $var1 正在傳遞,而 $var2 為空,如果我這樣做(內部函數):

$data1 | gm
System.Object[] System.Object[].ip

意思是 function 沒有得到我想要的變量。 我在這里想念什么?

當您使用括號時,PowerShell 會構造一個包含所有值的數組,並將其用作一個參數的值。

因此, CompareData ($var1, $var2)等效於CompareData -data1 @($var1, $var2) ,沒有為-data2參數指定值。

如果您按照@dwillits 的建議使用CompareData -data1 $var1 -data2 $var2您應該得到您期望的結果。

用括號調用它們時,我的函數出現問題。 你試過這樣稱呼你的 function 嗎?

    CompareData -data1 $var1 -data2 $var2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM