Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Проверить какой DHCP области (ScopeId) принадлежит IP адрес? (http://forum.oszone.net/showthread.php?t=319669)

Buddha.g 12-10-2016 03:18 2677227

Проверить какой DHCP области (ScopeId) принадлежит IP адрес?
 
Я сначала использовал функцию с таким алгоритмом:
Код:

$IPAddress="10.9.9.200"
$IPAddressArray=$IPAddress -split '\W'
$i=$IPAddressArray.Length
While ($i -gt 0)
{
    $i--
    $IPAddressArray[$i]=0
    $Subnet=$IPAddressArray -join "."
    if (Get-DhcpServerv4Scope -ScopeId $Subnet -ErrorAction SilentlyContinue) { break }
}
if ($i -gt 0)  { Write-Host " Scope $Subnet exist" }
else { Write-Host " Scope not exist " }

Но работает некорректно. Причислил IP "10.9.9.200" к области 10.0.0.0/24,
в которой он и близко не лежит.

Kazun 12-10-2016 09:04 2677255

Код:

function IsIpAddressInRange {
param(
        [string] $ipAddress,
        [string] $fromAddress,
        [string] $toAddress
    )

    $ip = [system.net.ipaddress]::Parse($ipAddress).GetAddressBytes()
    [array]::Reverse($ip)
    $ip = [system.BitConverter]::ToUInt32($ip, 0)

    $from = [system.net.ipaddress]::Parse($fromAddress).GetAddressBytes()
    [array]::Reverse($from)
    $from = [system.BitConverter]::ToUInt32($from, 0)

    $to = [system.net.ipaddress]::Parse($toAddress).GetAddressBytes()
    [array]::Reverse($to)
    $to = [system.BitConverter]::ToUInt32($to, 0)

    $from -le $ip -and $ip -le $to
}

$IPAddress="10.9.9.200"
Get-DhcpServerv4Scope | Where {IsIpAddressInRange $IPAddress $_.StartRange $_.EndRange}

Если нет областей больше /24,то можно:
Код:

Get-DhcpServerv4Scope -ScopeId ("10.9.9.200" -replace "\d+$","0")

Buddha.g 12-10-2016 12:28 2677334

Очень просто, как и должно быть у профи.
Лично я разбираясь с этим кодом потратил несколько часов
и перелистал пару книжек.
Спасибо!


Время: 03:00.

Время: 03:00.
© OSzone.net 2001-