嵌套循环无法按预期的Powershell工作

时间:2019-11-14 14:07:15

标签: powershell

您好,我正在创建一个脚本,该脚本创建了接口ips的历史记录,但是我在嵌套循环方面遇到了麻烦。

for($r = 0; $r -lt $iface.Count; $r++){
    for($m = 0; $m -lt $iface.Count; $m++){
    if($ifaceold[$r] -match $iface[$m]){

    Write-Host "name true"  " "  $ifaceold[$r]  " "  $iface[$m]

        if($ifaceold[$r] -match $ifaceip[$m]){


        Write-Host "ip true" " "  $ifaceold[$r]  " " $iface[$m]  " "  $ifaceip[$m]

        }else{

        Write-Host "ip false"   " "  $ifaceold[$r]  " "  $iface[$m]  " "  $ifaceip[$m]

        }

    }else{

    Write-Host "name false"  " "  $ifaceold[$r]  " "  $iface[$m]

}
}
}

Result:
    name true   Ethernet 6 10.10.2.5   Ethernet 6
    ip false   Ethernet 6 10.10.2.5   Ethernet 6   10.10.2.1
    name false   Ethernet 6 10.10.2.5   Ethernet 5
    name false   Ethernet 6 10.10.2.5   Ethernet 4
    name false   Ethernet 5 10.10.1.1   Ethernet 6
    name true   Ethernet 5 10.10.1.1   Ethernet 5
    ip true   Ethernet 5 10.10.1.1   Ethernet 5   10.10.1.1
    name false   Ethernet 5 10.10.1.1   Ethernet 4
    name false   Ethernet 4 192.168.77.53   Ethernet 6
    name false   Ethernet 4 192.168.77.53   Ethernet 5
    name true   Ethernet 4 192.168.77.53   Ethernet 4
    ip true   Ethernet 4 192.168.77.53   Ethernet 4   192.168.1.53

由于某种原因,第二个循环无法按预期工作。例如,几乎$ iface等于以太网6,它将与具有以太网6,以太网4,以太网5作为值的$ ifaces阵列匹配。如果$ ifaceold与$ iface匹配,那么它将转至下一个if序列,该序列对我而言是无效的。我现在想将以太网6 ip与$ ifaceip值进行匹配,如果它们匹配,则只需将输出作为true即可。但是正如您所看到的,它与名称匹配3次,但每个接口的ip仅匹配一次。谁能为我指出为什么我的第二个循环不起作用的正确方向?

1 个答案:

答案 0 :(得分:0)

好吧,我知道了我该怎么做。在与接口名称匹配并开始比较ip地址之后,第二个循环必须在if情况之内

for($r = 0; $r -lt $iface.Count; $r++){
for($m = 0; $m -lt $iface.Count; $m++){    

    if($ifaceold[$r] -match $iface[$m]){

    Write-Host "name true"  " "  $ifaceold[$r]  " "  $iface[$m]
        for($q = 0; $q -lt $iface.Count; $q++){
        if($ifaceold[$r] -match $ifaceip[$q]){


        Write-Host "ip true" " "  $ifaceold[$r]  " = " $iface[$q]  " "  $ifaceip[$q]

        }else{

        Write-Host "ip false"   " "  $ifaceold[$r]  " = "  $iface[$q]  " "  $ifaceip[$q]
        }
        }
    }else{

    Write-Host "name false"  " "  $ifaceold[$r]  " = "  $iface[$m]

}
}
}
            Result: 
            name true   Ethernet 6 10.10.2.5   
            ip false   Ethernet 6 10.10.2.5   Ethernet 6   10.10.2.1
            ip false   Ethernet 6 10.10.2.5   Ethernet 5   10.10.1.1
            ip false   Ethernet 6 10.10.2.5   Ethernet 4   192.168.1.53
            name true   Ethernet 5 10.10.1.1   
            ip false   Ethernet 5 10.10.1.1   Ethernet 6   10.10.2.1
            ip true   Ethernet 5 10.10.1.1   Ethernet 5   10.10.1.1
            ip false   Ethernet 5 10.10.1.1   Ethernet 4   192.168.1.53
            name true   Ethernet 4 192.168.77.53   
            ip false   Ethernet 4 192.168.77.53   Ethernet 6   10.10.2.1
            ip false   Ethernet 4 192.168.77.53   Ethernet 5   10.10.1.1
            ip true   Ethernet 4 192.168.77.53   Ethernet 4   192.168.1.53