Powershell Foreach-Schleife in Foreach-Schleife
Moin,
das Script soll unter anderem vom DHCP-Server den IPv4 Scope auslesen und dann schauen ob die IP-Adressen aus einer Csv-Datei in diesem Scope liegen.
Ich habe 2 CSV-Dateien zum Testen erstellt. Die Erste enthählt IP-Adressen von 192.168.11.0/24 -192.168.12.254/24 und die Zweite enthält den DHCP-Scope von 192.168.11.100 - 192.168.11.200 und 192.168.12.100 - 192.168.12.200
Dies ist mein Script:
Jetzt speichert er am ende aber nur die Werte im 192.168.12.100 bis 196.168.12.200 Bereich im Bereich 192.168.11.100 bis 192.168.11.200 wird nichts eingetragen. Kann mir bitte einer sagen warum er das nicht macht. In der ersten Foreach-Schleife läuft es ja einwandfrei.
Ich bin über jede Hilfe Dankbar
das Script soll unter anderem vom DHCP-Server den IPv4 Scope auslesen und dann schauen ob die IP-Adressen aus einer Csv-Datei in diesem Scope liegen.
Ich habe 2 CSV-Dateien zum Testen erstellt. Die Erste enthählt IP-Adressen von 192.168.11.0/24 -192.168.12.254/24 und die Zweite enthält den DHCP-Scope von 192.168.11.100 - 192.168.11.200 und 192.168.12.100 - 192.168.12.200
Dies ist mein Script:
clear
$dateiPfad1 = "C:\Powershell Scripte\IP-Adressen anpingen\IP-Adressen_Test.csv" #Löschen für fertiges Program
$hosts = Import-Csv -Path $dateiPfad1 -Delimiter ";" -Header "NetworkName","CIDR","IP","DhcpArea","DhcpReservation","Hostname","Comment","PingSuccess"
$referece = $hosts
$dhcpHostReservation = Get-DhcpServerv4Scope -ComputerName dhcp-01.raiffeisen.local | Get-DhcpServerv4Reservation -ComputerName dhcp-01.raiffeisen.local #| Select-Object -Property IPAddress,ScopeID
#$dhcpHostScope = Get-DhcpServerv4Scope -ComputerName dhcp-01.raiffeisen.local | Select-Object -Property StartRange,EndRange
$dateiPfad2 = "C:\Powershell Scripte\IP-Adressen anpingen\DHCP-Area_Test.csv"
$dhcpHostScope = import-csv -Path $dateiPfad2 -Delimiter ";" -Header "StartRange","EndRange"
[bool[]]$dhcpArea
function Test-IfIPisinDhcpArea($ip1, $ip2, $ip3){
[double[]]$arrDouble1 = $ip1.Split(".")
[double[]]$arrDouble2 = $ip2.Split(".")
[double[]]$arrDouble3 = $ip3.Split(".")
$wert1 = $arrDouble1 * 1000000000 + $arrDouble1[1] * 1000000 + $arrDouble1[2] * 1000 + $arrDouble1[3] * 1
$wert2 = $arrDouble2 * 1000000000 + $arrDouble2[1] * 1000000 + $arrDouble2[2] * 1000 + $arrDouble2[3] * 1
$wert3 = $arrDouble3 * 1000000000 + $arrDouble3[1] * 1000000 + $arrDouble3[2] * 1000 + $arrDouble3[3] * 1
if ($wert1 -ge $wert2 -and $wert1 -le $wert3){
$area = $true
}
else{
$area = $false
}
return $area
}
foreach ($h in $hosts) {
foreach ($r in $dhcpHostReservation) {
if($r.IPAddress -eq $h.IP) {
$h.DhcpReservation = 'X'
$h.Hostname = $r.Name
} else {
$h.DhcpReservation = ''
$h.Hostname = $r.Name
}
}
$result = Test-Connection $h.IP -Count 1 -Quiet
if ($result -eq $true) {
write-host "IP: $($h.IP) ist erreichbar." -ForegroundColor Green
$h.PingSuccess = 'X'
} else {
write-host "IP: $($h.IP) ist nicht erreichbar." -ForegroundColor Magenta
$h.PingSuccess = ''
}
}
#Es geht um diesen Abschnitt
foreach ($d in $dhcpHostScope){
foreach ($h in $hosts){
$dhcpArea=Test-IfIpIsInDhcpArea $h.IP $d.StartRange $d.EndRange
if($dhcpArea-eq $true){
$h.DhcpArea = '#'
}
else{
$h.DhcpArea = ''
}
}
}
$dateiPfadNeu = "U:\Projekte\Powershell Scripte\IP-Adressen anpingen\IP-Adressen anpingen neu.csv"
$hosts | Select-Object -Property IP,DhcpArea,DhcpReservation,PingSuccess | Export-Csv -Path $dateiPfadNeu -Delimiter ";" -NoTypeInformation
Jetzt speichert er am ende aber nur die Werte im 192.168.12.100 bis 196.168.12.200 Bereich im Bereich 192.168.11.100 bis 192.168.11.200 wird nichts eingetragen. Kann mir bitte einer sagen warum er das nicht macht. In der ersten Foreach-Schleife läuft es ja einwandfrei.
Ich bin über jede Hilfe Dankbar
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 585834
Url: https://administrator.de/contentid/585834
Ausgedruckt am: 24.11.2024 um 17:11 Uhr
1 Kommentar