internal/functions/Get-ADGraphNodeObject.ps1
function Get-ADGraphNodeObject { <# .SYNOPSIS Determines the unique ADGraphNode objects from given ADGraphEdges. .DESCRIPTION Determines the unique ADGraphNode objects from given ADGraphEdges. .PARAMETER StartObjectDN The DistinguishedName of the starting point .PARAMETER Edges Array of all Edges .EXAMPLE Get-ADGraphNodeObject -edges (Add-ADGraphEdge -startObjectDN $startObject) -startObjectDN $startObject Determines the nodes for the $startObject .NOTES General notes #> param ( [string]$StartObjectDN, [ADGraphEdge[]]$Edges ) Write-PSFMessage "Ermittele Nodes von startObjectDN=$StartObjectDN und edges=$($Edges.count)" $nodeDNs = @() $nodeObjects = @() $nodeDNs += ($Edges | Select-Object -ExpandProperty from) $nodeDNs += ($Edges | Select-Object -ExpandProperty to) $nodeDNs = $nodeDNs | Select-Object -Unique foreach ($DistinguishedName in $nodeDNs) { $currentNodeObject = $allExistingGroupsAndUsersHash[$DistinguishedName] # Aktuelle Node als Objekt initiieren, Formatierung passiert im Constructor $node = [ADGraphNode]::new($DistinguishedName, $currentNodeObject) $nodeObjects += $node # Das Start-Objekt erhält eine getrennte Formatierung if ($currentNodeObject.DistinguishedName -eq $StartObjectDN) { $node.attributes.fillcolor = "cyan" $node.attributes.style = "filled" } } # Falls keine Beziehungen vorhanden sind, wäre die Liste der Nodes leer. Hier wird ein Startobjekt angelegt. if ($nodeObjects.count -eq 0) { $nodeObjects += [ADGraphNode]::new($StartObjectDN, $allExistingGroupsAndUsersHash[$StartObjectDN] ) } $nodeObjects } |