Public/Network/Get-ADNetworkTopology.ps1
|
function Get-ADNetworkTopology { [CmdletBinding()] param( [string]$ObjectType = "NetworkTopology", [string]$ExportPath = $script:Config.ExportPath ) try { Write-Log "Retrieving network topology information..." -Level Info # Get Sites and Subnets $siteInfo = Get-ADSiteTopology # Get DNS Zones $dnsInfo = Get-ADDNSInfo $networkTopology = [PSCustomObject]@{ Sites = $siteInfo DNSZones = $dnsInfo } # Export data Export-ADData -ObjectType $ObjectType -Data $networkTopology -ExportPath $ExportPath return $networkTopology } catch { Write-Log "Error retrieving network topology: $($_.Exception.Message)" -Level Error Show-ErrorBox "Unable to retrieve network topology information. Check permissions." } } function Get-ADSiteTopology { [CmdletBinding()] param() try { $sites = Get-ADReplicationSite -Filter * | ForEach-Object { $site = $_ # Get subnets for this site $subnets = Get-ADReplicationSubnet -Filter "site -eq '$($site.DistinguishedName)'" | ForEach-Object { [PSCustomObject]@{ Name = $_.Name Location = $_.Location Description = $_.Description } } # Get site links $siteLinks = Get-ADReplicationSiteLink -Filter * | Where-Object { $_.Sites -contains $site.DistinguishedName } | ForEach-Object { [PSCustomObject]@{ Name = $_.Name Cost = $_.Cost ReplicationFrequency = $_.ReplicationFrequencyInMinutes Schedule = $_.ReplicationSchedule Sites = $_.Sites | ForEach-Object { (Get-ADObject $_ -Properties Name).Name } Options = $_.Options } } # Get replication connections $replConnections = Get-ADReplicationConnection -Filter "FromServer -like '*$($site.Name)*' -or ToServer -like '*$($site.Name)*'" | ForEach-Object { [PSCustomObject]@{ FromServer = $_.FromServer ToServer = $_.ToServer Schedule = $_.Schedule Options = $_.Options } } [PSCustomObject]@{ Name = $site.Name Description = $site.Description Location = $site.Location Subnets = $subnets SiteLinks = $siteLinks ReplicationConnections = $replConnections } } return $sites } catch { Write-Log "Error retrieving site topology: $($_.Exception.Message)" -Level Error return $null } } |