PS脚本:使用IPArray匹配IP地址的前3个八位字节

时间:2018-04-23 22:51:40

标签: arrays powershell split pattern-matching match

需要PS脚本帮助。

要求:我想使用FTP将大文件复制到多个VM。我有多个带有C类子网的IP范围的FTP。 例如“10.10.10.10”,“10.11.10.10”“10.10.12.10”,“10.10.10.13”(均为C类,子网为255.255.255。

脚本将在每个VM上本地执行。所以我希望脚本匹配分配的IP的前3个八位字节(少数VM也有多个具有不同范围的IP),然后从IP地址列表中选择FTP IP并将其设置为变量。

据我所知,我创建了包含所有FTP IP地址的IP阵列。然后我使用 Win32_NetworkAdapterConfiguration 来获取IP地址,子网和网关列表。我将 Win32_NetworkAdapterConfiguration 放到哈希表中,以便我可以将其用于比较。

需要帮助来比较哈希表数据并从IP阵列中获取匹配的IP地址,并将该FTP IP设置为变量。

实施例即可。如果VM A具有IP 10.10.12.25,那么它应该使用10.10.12.10 FTP IP。

我需要使用 Win32_NetworkAdapterConfiguration 使脚本与运行PS v2的旧操作系统兼容

$FTPIPs = @("10.10.10.10","10.11.10.10""10.10.12.10","10.10.10.13")
$AllIPs = @()
foreach ($adapter in (Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName $env:COMPUTERNAME ))
        {
         $Prop = @{
                'IPAddress' = $adapter.IpAddress
                'SubnetMask' = $adapter.IPSubnet
                'DefaultGateway' = $adapter.DefaultIPGateway
         }      
$obj = New-Object -TypeName PSobject -Property $Prop
$AllIPs += $obj
        }

1 个答案:

答案 0 :(得分:0)

创建脚本如下。

$FTPIPs = @("10.10.10.10","10.11.10.10","10.10.12.10","10.10.10.13")
$Prop = @{
    'IPAddress' = '10.11.10.54'
    'SubnetMask' = '255.255.255.128'
    'DefaultGateway' = '10.11.10.1'
}
$LocalIP = New-Object -TypeName PSobject -Property $Prop

$FTPIPs |
ForEach-Object {
    If ((([IPAddress]$LocalIP.IPAddress).Address -band ([IPAddress]$LocalIP.SubnetMask).Address) -eq (([IPAddress]$_).Address -band ([IPAddress]$LocalIP.SubnetMask).Address)) {
        "$_ is in the same subnet as $($LocalIP.IPAddress)"
    }
}