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.IPV4AdresseAllerdings 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 : MethodNotFoundDa ich noch nicht sehr erfahren im Umgang mit PowerShell bin, bin ich auch für andere Tipps offen.