比较 IP 范围和子网阵列的重叠



好的,我有两个数组,我想做的是

  1. array1(IP 范围)中查找第一个循环的重叠,
  2. 查找array2(IP 子网)中的重叠,然后
  3. 查看范围和子网之间是否存在重叠。

这里提出的问题是为什么当我运行它时,它报告在所有情况下都重叠,例如 192-168.0.1 - 192.168.0.10(IP 范围) 192.168.0.7 - 192.168.0.8(IP 范围)相互重叠。但是,10.152.0.100 - 10.152.0.110(IP 范围)与任何内容都没有重叠,因此应报告没有重叠。

$wmi返回的示例数据为:

192-168.0.1 - 192.168.0.10 (IP range)
192.168.0.7 - 192.168.0.8 (IP range)
192.168.0.0 (subnet)
192.168.0.15 - 192.168.0.20 (IP range)
10.152.0.100 - 10.152.0.110 (IP range)
192.168.1.100 - 192.168.1.100 (IP range)

法典:

function get_data
{
    $wmi = gwmi -Namespace "rootsmssite_XXX" -Class sms_boundary -Filter "boundarytype='3'" | Select-Object -ExpandProperty value #3 = IP Address Range
           $Target= @()
    foreach($i in $wmi)
    {
        $target += $i    
    }
    $wm = gwmi -Namespace "rootsmssite_XXX" -Class sms_boundary -Filter "boundarytype='0'" | Select-Object -ExpandProperty value #O = IPSubnet
           $Target1= @()
    foreach($i1 in $wm)
    {
        $target1 += $i1    
    }
    foreach($first in $Target)
    {
    if($Target -contains $first)
        {
            write-host "Overlap" $first
        }
        else
        {
            write-host "No Overlap"  $first
        }
    }
    foreach($first1 in $Target1)
    {
    if($Target -contains $first1)
        {
            write-host "Overlap" $first1
        }
        else
        {
            write-host "No Overlap"  $first1
        }    
    }
}
get_data

你循环"ForEach ($first in $target)"

然后在该循环中检查$first是否$target。当然,这是因为$first来自$target的foreach循环。我猜你打算检查如果 ($target 1 - 包含 $first) ?????

此外,这不会真正检查重叠。但是,脚本仅在完全匹配的记录时才查找。

10.0.0.0 - 10.0.0.10

与 10.0.0.7 - 10.0.0.8 重叠 但脚本不会检测到这一点。

最新更新