Public/DomainReport/BasicInfo/Get-ADDomainInfo.ps1
|
function Get-ADDomainInfo { process { try { Write-Log "Retrieving AD domain information..." -Level Info # Define the processing script for domain information $domainProcessingScript = { param($domain) [PSCustomObject]@{ DomainName = $domain.Name DomainMode = $domain.DomainMode PDCEmulator = $domain.PDCEmulator RIDMaster = $domain.RIDMaster InfrastructureMaster = $domain.InfrastructureMaster } | Add-Member -MemberType ScriptMethod -Name "ToString" -Value { "DomainName=$($this.DomainName); DomainMode=$($this.DomainMode); PDCEmulator=$($this.PDCEmulator); InfrastructureMaster=$($this.InfrastructureMaster)" } -Force } # Retrieve DomainInfo $domainInfo = Invoke-ADRetrievalWithProgress -ObjectType "DomainInfo" ` -Filter '*' ` -Properties @('Name', 'DomainMode', 'PDCEmulator', 'RIDMaster', 'InfrastructureMaster') ` -ProcessingScript $domainProcessingScript ` -ActivityName "Retrieving Domain Information" if (-not $domainInfo) { Write-Log "Failed to retrieve Domain Information." -Level Error return $null } # Define the processing script for Domain Controllers $dcProcessingScript = { param($dc) [PSCustomObject]@{ HostName = $dc.Name IPv4Address = $dc.IPv4Address Site = $dc.Site IsGlobalCatalog = $dc.IsGlobalCatalog OperatingSystem = $dc.OperatingSystem OperatingSystemVersion = $dc.OperatingSystemVersion Enabled = $dc.Enabled } | Add-Member -MemberType ScriptMethod -Name "ToString" -Value { "HostName=$($this.HostName); IPv4=$($this.IPv4Address); Site=$($this.Site)" } -PassThru } # Retrieve Domain Controllers $domainControllers = Invoke-ADRetrievalWithProgress -ObjectType "DomainControllers" ` -Filter '*' ` -ProcessingScript $dcProcessingScript ` -ActivityName "Retrieving Domain Controllers" if (-not $domainControllers) { Write-Log "Failed to retrieve Domain Controllers." -Level Warning $domainControllers = @() } # Combine DomainInfo and DomainControllers into a single object $combinedDomainInfo = [PSCustomObject]@{ DomainName = $domainInfo.DomainName DomainMode = $domainInfo.DomainMode PDCEmulator = $domainInfo.PDCEmulator RIDMaster = $domainInfo.RIDMaster InfrastructureMaster = $domainInfo.InfrastructureMaster DomainControllers = $domainControllers } # Add ToString method to combinedDomainInfo for better readability $combinedDomainInfo | Add-Member -MemberType ScriptMethod -Name "ToString" -Value { "DomainName=$($this.DomainName); DomainMode=$($this.DomainMode); InfrastructureMaster=$($this.InfrastructureMaster); DCs=$($this.DomainControllers.Count)" } -Force Write-Log "Successfully retrieved AD domain information with Domain Controllers." -Level Info return $combinedDomainInfo } catch { Write-Log "Error in Get-ADDomainInfo: $($_.Exception.Message)" -Level Error return $null } } } #region Get-ADOUInfo.ps1 function Get-ADOUInfo { process { try { Write-Log "Retrieving Organizational Unit (OU) information..." -Level Info # Define the processing script for OUs $processingScript = { param($ou) [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=' } | Add-Member -MemberType ScriptMethod -Name "ToString" -Value { "Name=$($this.Name); Children=$($this.ChildOUs.Split(',').Count)" } -Force } # Invoke the helper function $ouInfo = Invoke-ADRetrievalWithProgress -ObjectType "OrganizationalUnits" ` -Filter '*' ` -Properties @('Name', 'DistinguishedName', 'Description', 'Created', 'Modified') ` -ProcessingScript $processingScript ` -ActivityName "Retrieving Organizational Units" return $ouInfo } catch { Write-Log "Error in Get-ADOUInfo: $($_.Exception.Message)" -Level Error return $null } } } |