Private/Get/Get-FlattenedIssues.ps1
|
function Get-FlattenedIssues { <# .SYNOPSIS Flattens the IssueStore hashtable into individual LS2Issue objects. .DESCRIPTION Converts the nested IssueStore structure (DN -> Technique -> Issues array) into a flat list of LS2Issue objects containing complete vulnerability information. Each returned LS2Issue object contains all properties defined in the LS2Issue class: - Core identification: Technique, Forest, Name, DistinguishedName - Principal information: IdentityReference, IdentityReferenceSID, ActiveDirectoryRights - Template properties: Enabled, EnabledOn - CA properties: CAFullName - Ownership properties: Owner, HasNonStandardOwner - Remediation: Issue, Fix, Revert .INPUTS None. This function does not accept pipeline input. .OUTPUTS LS2Issue Returns LS2Issue objects with complete vulnerability information. .EXAMPLE Get-FlattenedIssues Returns a flattened list of all LS2Issue objects from the IssueStore. .EXAMPLE Get-FlattenedIssues | Where-Object Technique -eq 'ESC1' Returns only ESC1 issues. .EXAMPLE Get-FlattenedIssues | Group-Object {$_.IsTemplateIssue()} Groups issues by whether they are template-related. .NOTES Requires $script:IssueStore to be populated by Invoke-Locksmith2 or related Find-LS2Vulnerable* functions. #> [CmdletBinding()] [OutputType([LS2Issue])] param() #requires -Version 5.1 begin { Write-Verbose "Flattening IssueStore into individual issue entries..." # Get stores from module scope $stores = Get-LS2Stores if (-not $stores.IssueStore -or $stores.IssueStore.Count -eq 0) { Write-Warning "IssueStore is empty or not initialized. Run Invoke-Locksmith2 first." return } } process { $issueCount = 0 # Iterate through each DN in the IssueStore foreach ($dn in $stores.IssueStore.Keys) { # Iterate through each technique for this DN foreach ($technique in $stores.IssueStore[$dn].Keys) { # Get all issues for this DN + technique combination $issues = $stores.IssueStore[$dn][$technique] # Output each LS2Issue object directly foreach ($issue in $issues) { $issueCount++ $issue } } } Write-Verbose "Flattened $issueCount issue(s) from IssueStore" } } |