[英]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.