Public/BasicInfo/Get-ADDomainInfo.ps1
|
function Get-ADDomainInfo { try { Write-Log "Retrieving AD domain information..." -Level Info $domain = Invoke-WithRetry -ScriptBlock { Get-ADDomain -ErrorAction Stop } # Try to get domain controllers $domainControllers = try { Get-ADDomainController -Filter * -ErrorAction Stop | ForEach-Object { [PSCustomObject]@{ HostName = $_.HostName IPv4Address = $_.IPv4Address Site = $_.Site IsGlobalCatalog = $_.IsGlobalCatalog OperatingSystem = $_.OperatingSystem OperatingSystemVersion = $_.OperatingSystemVersion Enabled = $_.Enabled } } } catch { Write-Log "Unable to retrieve domain controllers: $($_.Exception.Message)" -Level Warning "Access Denied or Connection Failed" } $domainInfo = [PSCustomObject]@{ DomainName = $domain.Name DomainMode = $domain.DomainMode PDCEmulator = $domain.PDCEmulator RIDMaster = $domain.RIDMaster InfrastructureMaster = $domain.InfrastructureMaster DomainControllers = $domainControllers OrganizationalUnits = Get-ADOUInfo } return $domainInfo } catch { Write-Log "Error in Get-ADDomainInfo: $($_.Exception.Message)" -Level Error return $null } } function Get-ADOUInfo { try { Write-Log "Retrieving OU information for domain:..." -Level Info $ous = Get-ADOrganizationalUnit -Filter * -Properties * -ErrorAction Stop $ouInfo = foreach ($ou in $ous) { [PSCustomObject]@{ Name = $ou.Name DistinguishedName = $ou.DistinguishedName Description = $ou.Description Created = $ou.Created Modified = $ou.Modified ChildOUs = ($ou.DistinguishedName -split ',OU=' | Select-Object -Skip 1) -join ',OU=' } } return $ouInfo } catch { Write-Log "Error retrieving OU information for: $($_.Exception.Message)" -Level Error return $null } } |