Mein bisheriger Code sieht so aus:
$sites = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Sites | Where-Object {($_.Name -ne '*******') -and ($_.Name -ne '*******')} $sitesubnets = @() ForEach ($site in $sites) { ForEach ($subnet in $site.subnets) { $temp = New-Object PSCustomObject -Property @{ 'Subnetz' = $subnet 'Domain' = (($site.Name).Substring(0,6) + 'S01').ToUpper() } $sitesubnets += $temp } } $sitesubnets = $sitesubnets | Sort-Object -Property 'Domain' -Unique $filename = Read-Host -Prompt 'Dateiname!' $servercsv = Import-Csv "$filename.csv" $array = @() ForEach($s in $servercsv) { $ipdata = Test-Connection $s.Name -Count 1 | Select-Object -Property Address,IPV4Address $eintrag = $sitesubnets | Where-Object {$_.Domain -eq $ipdata.Address} If ($eintrag.Subnetz -contains "/24") { [Bool]$check = 0 } Else { [Bool]$check = 1 } If($check) { } If ($eintrag) { $temp = New-Object PSCustomObject -Property @{ 'SubnetzAD' = $eintrag.Subnetz 'DomainAD' = $eintrag.Domain 'DomainIP' = $ipdata.Address 'IPAdresse' = $ipdata.IPV4Address 'Check' = $check 'Status' = "" } $array += $temp } }
Die Sternchen stehen für einen bestimmten Namen der allerdings nicht relevant ist.
Mein Problem ist jetzt, dass ich nicht weiß wie ich die ersten drei Adressblöcke der Subnetz IP und der normalen IP vergleichen kann. Die Zeilen die mir jetzt noch fehlen sollen in den If($check) Block.
Ich habe versucht das ganze so zu lösen:
$status = $eintrag.Subnetz.Split(".") | -eq $ipdata.IPV4Adresse
Allerdings bekomme ich dann so eine Fehlermeldung:
Fehler beim Aufrufen der Methode, da [System.DirectoryServices.ActiveDirectory.ActiveDirectorySubnet] keine Methode mit dem Namen "Split" enthält. Bei E:\test\new 3.ps1:33 Zeichen:35 + $status = $eintrag.Subnetz.Split <<<< (".") | -eq $ipdata.IPV4Adresse+ CategoryInfo : InvalidOperation: (Split:String) [], RuntimeException+ FullyQualifiedErrorId : MethodNotFound
Da ich noch nicht sehr erfahren im Umgang mit PowerShell bin, bin ich auch für andere Tipps offen.