internal/functions/Export-ADGraphExcelFile.ps1

function Export-ADGraphExcelFile {
    <#
        .SYNOPSIS
        Creates an Excel file from the provided graph.
 
        .DESCRIPTION
        Creates an Excel file from the provided graph.
 
        .PARAMETER Graph
        A pregenerated graph
 
        .PARAMETER Path
        The filename of the to be created Excel file
 
        .EXAMPLE
        New-ADGraphGroupGraph @graphOptions | Out-String | Export-ADGraphExcelFile -Path $fileName
 
        Exports the generated graph to the named Excel-File
 
        .NOTES
        General notes
        #>

    param (
        [parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $Graph,
        [parameter(Mandatory = $true, ValueFromPipeline = $false)]
        $Path
    )
    process {
        Write-PSFMessage "Erstelle $Path Objekten"
        $Graph |Set-Clipboard
        try {
            $excelContent=@()
            $pattern = 'CN=([^,]*).*>"CN=([^,]*)'
            $results = $Graph | Select-String $pattern -AllMatches
            foreach ($match in $results.Matches) {
                $member = $match.Groups[1]
                $memberOf = $match.Groups[2]
                $excelContent+=[PSCustomObject]@{
                    member = $member
                    memberOf = $memberOf
                }
            }
        }
        catch {
            Write-PSFMessage "Error while extracting Excel-Data"
        }
        $excelContent | Export-Excel -path $Path -WorksheetName "Hierarchy $((Get-Date).toString('yyyy-MM-dd HH-mm'))" -ClearSheet -autosize
        # # Zuordnung aller Node-Objekte zu den Edges
        # $nodeHashTable = @{ }
        # foreach ($node in $nodeObjects) {
        # $nodeHashTable.add($node.name, $node)
        # }
        # foreach ($edge in $edgeObjects) {
        # add-member -InputObject $edge -membertype noteproperty -name fromNode -value $nodeHashTable[$edge.from] -Force
        # add-member -InputObject $edge -membertype noteproperty -name toNode -value $nodeHashTable[$edge.to] -Force
        # }
        # # Es werden nur Objekte als Delegation (daher im AD) angelegt, welche mit einem 't' beginnen
        # $newAdNodes = $nodeObjects | where-object { $_.attributes.label -imatch '^t' }
        # Remove-Item $Path

        # $xlsItems = @()
        # foreach ($entry in $newAdNodes) {
        # $xlsItems += [PSCustomObject]@{
        # Name = $entry.attributes.label
        # Beschreibung = $entry.ADBaseObject.Description
        # Insel = (Get-ADGraphInselFromDN -dn $entry.name)
        # }
        # }
        # $xlsItems | Export-XLSX $Path -WorksheetName "Delegationen" -AutoFit -Table
        # # Alle Verknüpfungen werden als Delegations-Hierarchie gespeichert
        # $xlsItems = @()
        # foreach ($entry in $edgeObjects) {
        # $xlsItems += [PSCustomObject]@{
        # Insel = (Get-ADGraphInselFromDN -dn $entry.from)
        # Delegation = ($entry.fromNode.attributes.label)
        # memberOf = ($entry.toNode.attributes.label)
        # }
        # }
        # $xlsItems | Export-XLSX $Path -WorksheetName "Delegations-Hierarchie" -AutoFit -Table
    }
}