Проверить какой 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,
в которой он и близко не лежит.
|
Код:
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")
|
Очень просто, как и должно быть у профи.
Лично я разбираясь с этим кодом потратил несколько часов
и перелистал пару книжек.
Спасибо!
|
Время: 03:00.
© OSzone.net 2001-