Src/Private/Get-AbrADTrust.ps1

function Get-AbrADTrust {
    <#
    .SYNOPSIS
    Used by As Built Report to retrieve Microsoft AD Trust from Domain Controller
    .DESCRIPTION
 
    .NOTES
        Version: 0.9.1
        Author: Jonathan Colon
        Twitter: @jcolonfzenpr
        Github: rebelinux
    .EXAMPLE
 
    .LINK
 
    #>

    [CmdletBinding()]
    param (
        [Parameter (
            Position = 0,
            Mandatory)]
        [string]
        $Domain
    )

    begin {
        Write-PScriboMessage "Collecting AD Trust information of $($Domain.ToString().ToUpper())."
    }

    process {
        try {
            if ($Domain) {
                try {
                    $DC = Invoke-Command -Session $TempPssSession { (Get-ADDomain -Identity $using:Domain).ReplicaDirectoryServers | Select-Object -First 1 }
                    $Trusts = Invoke-Command -Session $TempPssSession { Get-ADTrust -Filter * -Properties * -Server $using:DC }
                    if ($Trusts) {
                        Section -Style Heading3 'Domain and Trusts' {
                            $TrustInfo = @()
                            foreach ($Trust in $Trusts) {
                                try {
                                    $inObj = [ordered] @{
                                        'Name' = $Trust.Name
                                        'Path' = ConvertTo-ADCanonicalName -DN $Trust.DistinguishedName -Domain $Domain
                                        'Source' = ConvertTo-ADObjectName $Trust.Source -Session $TempPssSession -DC $DC
                                        'Target' = $Trust.Target
                                        'Trust Type' = $Trust.TrustType
                                        'Trust Attributes' = switch ($Trust.TrustAttributes) {
                                            1 { "Non-Transitive" }
                                            2 { "Uplevel clients only (Windows 2000 or newer" }
                                            4 { "Quarantined Domain (External)" }
                                            8 { "Forest Trust" }
                                            16 { "Cross-Organizational Trust (Selective Authentication)" }
                                            32 { "Intra-Forest Trust (trust within the forest)" }
                                            64 { "Inter-Forest Trust (trust with another forest)" }
                                            default { $Trust.TrustAttributes }
                                        }
                                        'Trust Direction' = Switch ($Trust.TrustDirection) {
                                            0 { "Disabled (The trust relationship exists but has been disabled)" }
                                            1 { "Inbound (TrustING domain)" }
                                            2 { "Outbound (TrustED domain)" }
                                            3 { "Bidirectional (two-way trust)" }
                                            default { $Trust.TrustDirection }
                                        }
                                        'IntraForest' = $Trust.IntraForest
                                        'Selective Authentication' = $Trust.SelectiveAuthentication
                                        'SID Filtering Forest Aware' = $Trust.SIDFilteringForestAware
                                        'SID Filtering Quarantined' = $Trust.SIDFilteringQuarantined
                                        'TGT Delegation' = $Trust.TGTDelegation
                                        'Kerberos AES Encryption' = $Trust.UsesAESKeys
                                        'Kerberos RC4 Encryption' = $Trust.UsesRC4Encryption
                                        'Uplevel Only' = $Trust.UplevelOnly
                                    }
                                    $TrustInfo += [pscustomobject](ConvertTo-HashToYN $inObj)
                                } catch {
                                    Write-PScriboMessage -IsWarning "$($_.Exception.Message) (Trust Item)"
                                }
                            }

                            if ($InfoLevel.Domain -ge 2) {
                                foreach ($Trust in $TrustInfo) {
                                    Section -Style NOTOCHeading4 -ExcludeFromTOC "$($Trust.Name)" {
                                        $TableParams = @{
                                            Name = "Trusts - $($Trust.Name)"
                                            List = $true
                                            ColumnWidths = 40, 60
                                        }
                                        if ($Report.ShowTableCaptions) {
                                            $TableParams['Caption'] = "- $($TableParams.Name)"
                                        }
                                        $Trust | Table @TableParams
                                    }
                                }
                            } else {
                                $TableParams = @{
                                    Name = "Trusts - $($Domain.ToString().ToUpper())"
                                    List = $false
                                    Columns = 'Name', 'Path', 'Source', 'Target', 'Trust Direction'
                                    ColumnWidths = 20, 20, 20, 20, 20
                                }
                                if ($Report.ShowTableCaptions) {
                                    $TableParams['Caption'] = "- $($TableParams.Name)"
                                }
                                $TrustInfo | Table @TableParams
                            }
                            if ($Domain -eq $ADSystem.RootDomain) {
                                try {
                                    try {
                                        $Graph = New-ADDiagram -Target $System -Credential $Credential -Format base64 -Direction top-to-bottom -DiagramType Trusts
                                    } catch {
                                        Write-PScriboMessage -IsWarning "Domain and Trusts Diagram Graph: $($_.Exception.Message)"
                                    }

                                    if ($Graph) {
                                        If ((Get-DiaImagePercent -GraphObj $Graph).Width -gt 1500) { $ImagePrty = 10 } else { $ImagePrty = 50 }
                                        Section -Style Heading3 "Domain and Trusts Diagram." {
                                            Image -Base64 $Graph -Text "Domain and Trusts Diagram" -Percent $ImagePrty -Align Center
                                            Paragraph "Image preview: Opens the image in a new tab to view it at full resolution." -Tabs 2
                                        }
                                        BlankLine -Count 2
                                    }
                                } catch {
                                    Write-PScriboMessage -IsWarning "Domain and Trusts Diagram Section: $($_.Exception.Message)"
                                }
                            }
                        }
                    } else {
                        Write-PScriboMessage -IsWarning "No Domain Trust information found in $Domain, disabling the section."
                    }
                } catch {
                    Write-PScriboMessage -IsWarning "$($_.Exception.Message) (Trust Table)"
                }
            }
        } catch {
            Write-PScriboMessage -IsWarning "$($_.Exception.Message) (Trust Section)"
        }
    }

    end {}

}