Powershell IP
Grüß euch,
viele Powershellscripte sind anscheinend für kleinere Netze designed und verwenden Schleifen die zum Beispiel die IPs 192.168.178.xxx von 0 bis 255 (oder 1 bis 254 ohne Netz und Broadcast IP) durchgehen. Da ich aber auch größere Netze habe (größer als 24er Masken) müsste ich verschachtelte Schleifen verwenden um dann z.B. auf 192.168.179.0 zu kommen. Gibt es da eine elegantere Möglichkeit? PS bietet ja den [ipaddress] Datentyp aber ich habe nichts gefunden was wie ein next oder +1 funktioniert. Oder kennt sich vielleicht jemand so gut aus das er eine Ableitung der Klasse bauen kann die das ermöglicht?
Danke schonmal
viele Powershellscripte sind anscheinend für kleinere Netze designed und verwenden Schleifen die zum Beispiel die IPs 192.168.178.xxx von 0 bis 255 (oder 1 bis 254 ohne Netz und Broadcast IP) durchgehen. Da ich aber auch größere Netze habe (größer als 24er Masken) müsste ich verschachtelte Schleifen verwenden um dann z.B. auf 192.168.179.0 zu kommen. Gibt es da eine elegantere Möglichkeit? PS bietet ja den [ipaddress] Datentyp aber ich habe nichts gefunden was wie ein next oder +1 funktioniert. Oder kennt sich vielleicht jemand so gut aus das er eine Ableitung der Klasse bauen kann die das ermöglicht?
Danke schonmal
Please also mark the comments that contributed to the solution of the article
Content-ID: 600901
Url: https://administrator.de/forum/powershell-ip-600901.html
Printed on: February 12, 2025 at 03:02 o'clock
4 Comments
Latest comment

function Get-NetworkRange( [String]$IP, [String]$Mask ) {
if ($IP.Contains("/")) {$t = $IP.Split("/");$IP = $t;$Mask = $t[1]}
if (!$Mask.Contains(".")) {
$Mask = [Convert]::ToUInt32($(("1" * $Mask).PadRight(32, "0")), 2)
}
$toDecimalIP = {
param([Net.IPAddress]$ip)
$i = 3; $decip = 0;
$ip.GetAddressBytes() | %{ $decip += $_ * [Math]::Pow(256, $i); $i-- }
return [UInt32]$decip
}
$dIP = . $toDecimalIP $IP
$dMask = . $toDecimalIP $Mask
$Network = $dIP -band $dMask
$Broadcast = $dIP -bor ((-bnot $dMask) -band [UInt32]::MaxValue)
for ($i = $($Network + 1); $i -lt $Broadcast; $i++){
$ip = [UInt32]$i
[String]::Join('.', $(for ($j = 3; $j -gt -1; $j--) {
$Remainder = $ip % [Math]::Pow(256, $j)
($ip - $Remainder) / [Math]::Pow(256, $j)
$ip = $Remainder
}))
}
}
# Beispiel
Get-NetworkRange 192.168.1.0/16
Hi,
System.Net.IpAddress hat eine Eigenschaft "Address". Diese ist eine Int64 Zahl. Wenn Du diese hochzählst, dann kannst Du daraus auch wieder eine neuen Adresse bilden.
liefert Dir
10.10.10.10
10.10.11.54
Jetzt musst Du nur noch prüfen, ob das in die Maske passt. (Im selben Subnet ist)
E.
Edit:
siehe hier: https://github.com/omniomi/PSMailTools/blob/v0.2.0/src/Private/spf/IPInR ...
Mit der dort beschrieben Funktion IPInRange kannst Du das prüfen.
IPInRange 10.10.11.54 10.10.10.0/24 --> False
System.Net.IpAddress hat eine Eigenschaft "Address". Diese ist eine Int64 Zahl. Wenn Du diese hochzählst, dann kannst Du daraus auch wieder eine neuen Adresse bilden.
$A =[System.Net.IpAddress]::Parse("10.10.10.10")
$B =[System.Net.IpAddress]::Parse($A.Address + 300)
$A
$B
10.10.10.10
10.10.11.54
Jetzt musst Du nur noch prüfen, ob das in die Maske passt. (Im selben Subnet ist)
E.
Edit:
siehe hier: https://github.com/omniomi/PSMailTools/blob/v0.2.0/src/Private/spf/IPInR ...
Mit der dort beschrieben Funktion IPInRange kannst Du das prüfen.
IPInRange 10.10.11.54 10.10.10.0/24 --> False