在Powershell中更改IP地址

时间:2011-12-04 01:55:05

标签: powershell compare range ip-address

我正在尝试从计算机获取IP地址,然后检查地址以查看它是否在某个范围内。但是我真的不确定如何做到这一点。我已经弄清楚如何从计算机获取IP地址,但是在范围内检查它是另一个故事......

这是我到目前为止所做的:

Get-WMIObject win32_NetworkAdapterConfiguration |   Where-Object { $_.IPEnabled -eq $true } |   Foreach-Object { $_.IPAddress } |   Foreach-Object { [IPAddress]$_ } |   Where-Object { $_.AddressFamily -eq 'Internetwork'  } |   Foreach-Object { $_.IPAddressToString }

If ($_.IPAddressToString -eq 192.168.0.10 - 192.168.0.50)
{Write-host $_.IPAddressToString}
else ($_.IPAddressToString -ne 192.168.0.10 - 192.168.0.50)
{$_.IPAddressToString = 192.168.0.15}

第一行是我用来获取IP地址的。我正在循环if语句,以便如果地址在范围内,那么除了输出地址之外它不会做任何事情。如果IP不在合适的范围内,我为IP地址做了一个else语句。

我发现之间没有任何内容。我不知道如何编写192.168.0.10 - 192.168.0.50的脚本。我也无法找到任何允许我检查IP地址是否在该范围内的东西,所以我只是使用等于而不等于。不用说它显然不起作用。

1 个答案:

答案 0 :(得分:1)

试试这个,改变以适合你的低点和高点。

$ipLow = [IPAddress] "192.168.9.10"
$ipHigh = [IPAddress] "192.168.9.60"

[Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() | ? {$_.OperationalStatus -eq "Up"} | % {
    $addrs = $_.GetIPProperties().UnicastAddresses
    if ($addrs) {
        foreach ($addr in $addrs) {
            if ($addr.Address.AddressFamily -eq 'InterNetwork') {
                if ($addr.Address.Address -ge $ipLow.Address -and $addr.Address.Address -le $ipHigh.Address) {
                    $addr.Address
                }
            }
        }
    }
}