Skip to content

Commit

Permalink
Add filtering to diagrams
Browse files Browse the repository at this point in the history
  • Loading branch information
PrzemyslawKlys committed Jul 1, 2024
1 parent 88bf548 commit 0602b83
Show file tree
Hide file tree
Showing 13 changed files with 83 additions and 37 deletions.
6 changes: 3 additions & 3 deletions ADEssentials.psd1
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
Description = 'Helper module for Active Directory with lots of useful functions that simplify supporting Active Directory.'
FunctionsToExport = @('Add-ADACL', 'Compare-PingCastleReport', 'Compare-WinADGlobalCatalogObjects', 'Copy-ADOUSecurity', 'Disable-ADACLInheritance', 'Enable-ADACLInheritance', 'Export-ADACLObject', 'Find-WinADObjectDifference', 'Get-ADACL', 'Get-ADACLOwner', 'Get-DNSServerIP', 'Get-PingCastleReport', 'Get-WinADACLConfiguration', 'Get-WinADACLForest', 'Get-WinADBitlockerLapsSummary', 'Get-WinADComputerACLLAPS', 'Get-WinADComputers', 'Get-WinADDelegatedAccounts', 'Get-WinADDFSHealth', 'Get-WinADDFSTopology', 'Get-WinADDHCP', 'Get-WinADDiagnostics', 'Get-WinADDnsInformation', 'Get-WinADDnsIPAddresses', 'Get-WinADDnsRecords', 'Get-WinADDnsServerForwarder', 'Get-WinADDnsServerScavenging', 'Get-ADWinDnsServerZones', 'Get-WinADDNSZones', 'Get-WinADDomain', 'Get-WinADDomainControllerGenerationId', 'Get-WinADDomainControllerOption', 'Get-WinADDuplicateObject', 'Get-WinADDuplicateSPN', 'Get-WinADForest', 'Get-WinADForestControllerInformation', 'Get-WinADForestOptionalFeatures', 'Get-WinADForestReplication', 'Get-WinADForestReplicationSummary', 'Get-WinADForestRoles', 'Get-WinADForestSchemaProperties', 'Get-WinADForestSites', 'Get-WinADForestSubnet', 'Get-WinADGroupMember', 'Get-WinADGroupMemberOf', 'Get-WinADGroups', 'Get-WinADKerberosAccount', 'Get-WinADLastBackup', 'Get-WinADLDAPBindingsSummary', 'Get-WinADLMSettings', 'Get-WinADObject', 'Get-WinADPasswordPolicy', 'Get-WinADPrivilegedObjects', 'Get-WinADProtocol', 'Get-WinADProxyAddresses', 'Get-WinADServiceAccount', 'Get-WinADSharePermission', 'Get-WinADSiteConnections', 'Get-WinADSiteLinks', 'Get-WinADSiteOptions', 'Get-WinADTomebstoneLifetime', 'Get-WinADTrust', 'Get-WinADTrustLegacy', 'Get-WinADUserPrincipalName', 'Get-WinADUsers', 'Get-WinADUsersForeignSecurityPrincipalList', 'Get-WinADWellKnownFolders', 'Invoke-ADEssentials', 'Invoke-PingCastle', 'New-ADACLObject', 'New-ADSite', 'Remove-ADACL', 'Remove-WinADDFSTopology', 'Remove-WinADDuplicateObject', 'Remove-WinADSharePermission', 'Rename-WinADUserPrincipalName', 'Repair-WinADACLConfigurationOwner', 'Repair-WinADEmailAddress', 'Repair-WinADForestControllerInformation', 'Request-ChangePasswordAtLogon', 'Request-DisableOnAccountExpiration', 'Restore-ADACLDefault', 'Set-ADACL', 'Set-ADACLInheritance', 'Set-ADACLOwner', 'Set-DnsServerIP', 'Set-WinADDiagnostics', 'Set-WinADDomainControllerOption', 'Set-WinADForestACLOwner', 'Set-WinADReplication', 'Set-WinADReplicationConnections', 'Set-WinADShare', 'Set-WinADTombstoneLifetime', 'Show-WinADDNSRecords', 'Show-WinADGroupCritical', 'Show-WinADGroupMember', 'Show-WinADGroupMemberOf', 'Show-WinADKerberosAccount', 'Show-WinADObjectDifference', 'Show-WinADOrganization', 'Show-WinADSites', 'Show-WinADTrust', 'Show-WinADUserSecurity', 'Sync-WinADDomainController', 'Test-ADDomainController', 'Test-ADRolesAvailability', 'Test-ADSiteLinks', 'Test-DNSNameServers', 'Test-FSMORolesAvailability', 'Test-LDAP', 'Test-WinADDNSResolving', 'Test-WinADObjectReplicationStatus', 'Test-WinADVulnerableSchemaClass', 'Update-LastLogonTimestamp')
GUID = '9fc9fd61-7f11-4f4b-a527-084086f1905f'
ModuleVersion = '0.0.214'
ModuleVersion = '0.0.215'
PowerShellVersion = '5.1'
PrivateData = @{
PSData = @{
Expand All @@ -19,11 +19,11 @@
RequiredModules = @(@{
Guid = 'ee272aa8-baaa-4edf-9f45-b6d6f7d844fe'
ModuleName = 'PSSharedGoods'
ModuleVersion = '0.0.291'
ModuleVersion = '0.0.293'
}, @{
Guid = 'a7bdf640-f5cb-4acf-9de0-365b322d245c'
ModuleName = 'PSWriteHTML'
ModuleVersion = '1.19.0'
ModuleVersion = '1.23.0'
}, @{
Guid = '5df72a79-cdf6-4add-b38d-bcacf26fb7bc'
ModuleName = 'PSEventViewer'
Expand Down
5 changes: 4 additions & 1 deletion CHANGELOG.MD
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
#### 0.0.214
#### 0.0.215
- Add `EnableDiagramFiltering`,`DiagramFilteringMinimumCharacters` and `ScrollX` to `Show-WinADGroupMember` and `Show-WinADGroupMemberOf` and `Show-WinADGroupCritical` to allow better filtering and scrolling

#### 0.0.214
- Bugfix for `Test-LDAP`

#### 0.0.213
Expand Down
6 changes: 4 additions & 2 deletions Private/New-HTMLGroupDiagramDefault.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
[switch] $HideOther,
[string] $DataTableID,
[int] $ColumnID,
[switch] $Online
[switch] $Online,
[switch] $EnableDiagramFiltering,
[int] $DiagramFilteringMinimumCharacters = 3
)
New-HTMLDiagram -Height 'calc(100vh - 200px)' {
#if ($DataTableID) {
Expand Down Expand Up @@ -75,5 +77,5 @@
}
}
}
}
} -EnableFiltering:$EnableDiagramFiltering.IsPresent -MinimumFilteringChars $DiagramFilteringMinimumCharacters
}
6 changes: 4 additions & 2 deletions Private/New-HTMLGroupDiagramHierachical.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
[switch] $HideComputers,
[switch] $HideUsers,
[switch] $HideOther,
[switch] $Online
[switch] $Online,
[switch] $EnableDiagramFiltering,
[int] $DiagramFilteringMinimumCharacters = 3
)
New-HTMLDiagram -Height 'calc(100vh - 200px)' {
New-DiagramOptionsLayout -HierarchicalEnabled $true #-HierarchicalDirection FromLeftToRight #-HierarchicalSortMethod directed
Expand Down Expand Up @@ -81,5 +83,5 @@
}
}
}
}
} -EnableFiltering:$EnableDiagramFiltering.IsPresent -MinimumFilteringChars $DiagramFilteringMinimumCharacters
}
6 changes: 4 additions & 2 deletions Private/New-HTMLGroupDiagramSummary.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
[switch] $HideOther,
[string] $DataTableID,
[int] $ColumnID,
[switch] $Online
[switch] $Online,
[switch] $EnableDiagramFiltering,
[int] $DiagramFilteringMinimumCharacters = 3
)
$ConnectionsTracker = @{}
New-HTMLDiagram -Height 'calc(100vh - 200px)' {
Expand Down Expand Up @@ -84,5 +86,5 @@
}
}
}
}
} -EnableFiltering:$EnableDiagramFiltering.IsPresent -MinimumFilteringChars $DiagramFilteringMinimumCharacters
}
6 changes: 4 additions & 2 deletions Private/New-HTMLGroupDiagramSummaryHierarchical.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
[switch] $HideComputers,
[switch] $HideUsers,
[switch] $HideOther,
[switch] $Online
[switch] $Online,
[switch] $EnableDiagramFiltering,
[int] $DiagramFilteringMinimumCharacters = 3
)
New-HTMLDiagram -Height 'calc(100vh - 200px)' {
New-DiagramOptionsLayout -HierarchicalEnabled $true #-HierarchicalDirection FromLeftToRight #-HierarchicalSortMethod directed
Expand Down Expand Up @@ -73,5 +75,5 @@
}
}
}
}
} -EnableFiltering:$EnableDiagramFiltering.IsPresent -MinimumFilteringChars $DiagramFilteringMinimumCharacters
}
6 changes: 4 additions & 2 deletions Private/New-HTMLGroupOfDiagramDefault.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
[switch] $HideOther,
[string] $DataTableID,
[int] $ColumnID,
[switch] $Online
[switch] $Online,
[switch] $EnableDiagramFiltering,
[int] $DiagramFilteringMinimumCharacters = 3
)
New-HTMLDiagram -Height 'calc(100vh - 200px)' {
#if ($DataTableID) {
Expand Down Expand Up @@ -75,5 +77,5 @@
}
}
}
}
} -EnableDiagramFiltering:$EnableDiagramFiltering.IsPresent -DiagramFilteringMinimumCharacters $DiagramFilteringMinimumCharacters
}
6 changes: 4 additions & 2 deletions Private/New-HTMLGroupOfDiagramHierarchical.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
[switch] $HideComputers,
[switch] $HideUsers,
[switch] $HideOther,
[switch] $Online
[switch] $Online,
[switch] $EnableDiagramFiltering,
[int] $DiagramFilteringMinimumCharacters = 3
)
New-HTMLDiagram -Height 'calc(100vh - 200px)' {
New-DiagramOptionsLayout -HierarchicalEnabled $true #-HierarchicalDirection FromLeftToRight #-HierarchicalSortMethod directed
Expand Down Expand Up @@ -71,5 +73,5 @@
}
}
}
}
} -EnableDiagramFiltering:$EnableDiagramFiltering.IsPresent -DiagramFilteringMinimumCharacters $DiagramFilteringMinimumCharacters
}
6 changes: 4 additions & 2 deletions Private/New-HTMLGroupOfDiagramSummary.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
[switch] $HideOther,
[string] $DataTableID,
[int] $ColumnID,
[switch] $Online
[switch] $Online,
[switch] $EnableDiagramFiltering,
[int] $DiagramFilteringMinimumCharacters = 3
)
$ConnectionsTracker = @{}
New-HTMLDiagram -Height 'calc(100vh - 200px)' {
Expand Down Expand Up @@ -84,5 +86,5 @@
}
}
}
}
} -EnableDiagramFiltering:$EnableDiagramFiltering.IsPresent -DiagramFilteringMinimumCharacters $DiagramFilteringMinimumCharacters
}
6 changes: 4 additions & 2 deletions Private/New-HTMLGroupOfDiagramSummaryHierarchical.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
[switch] $HideComputers,
[switch] $HideUsers,
[switch] $HideOther,
[switch] $Online
[switch] $Online,
[switch] $EnableDiagramFiltering,
[int] $DiagramFilteringMinimumCharacters = 3
)
New-HTMLDiagram -Height 'calc(100vh - 200px)' {
New-DiagramOptionsLayout -HierarchicalEnabled $true #-HierarchicalDirection FromLeftToRight #-HierarchicalSortMethod directed
Expand Down Expand Up @@ -73,5 +75,5 @@
}
}
}
}
} -EnableDiagramFiltering:$EnableDiagramFiltering.IsPresent -DiagramFilteringMinimumCharacters $DiagramFilteringMinimumCharacters
}
16 changes: 14 additions & 2 deletions Public/Show-WinADGroupCritical.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@
.PARAMETER Summary
Adds additional tab with all groups together on two diagrams
.PARAMETER EnableDiagramFiltering
Enables search in diagrams. It's useful when there are many groups and it's hard to find the one you are looking for.
.PARAMETER DiagramFilteringMinimumCharacters
Minimum characters to start search in diagrams. Default is 3.
.PARAMETER ScrollX
Adds horizontal scroll to the table. Useful when there are many columns.
.EXAMPLE
Show-WinADGroupCritical
Expand Down Expand Up @@ -92,7 +101,10 @@
[switch] $DisableBuiltinConditions,
[switch] $AdditionalStatistics,
[switch] $SkipDiagram,
[switch] $Summary
[switch] $Summary,
[switch] $EnableDiagramFiltering,
[int] $DiagramFilteringMinimumCharacters = 3,
[switch] $ScrollX
)

$ForestInformation = Get-WinADForestDetails -Extended
Expand Down Expand Up @@ -139,7 +151,7 @@
}
}
if ($ListGroups.Count -gt 0) {
Show-WinADGroupMember -Identity $ListGroups -HideHTML:$HideHTML.IsPresent -FilePath $FilePath -DisableBuiltinConditions:$DisableBuiltinConditions.IsPresent -Online:$Online.IsPresent -HideUsers:$HideUsers.IsPresent -HideComputers:$HideComputers.IsPresent -AdditionalStatistics:$AdditionalStatistics.IsPresent -Summary:$Summary.IsPresent -SkipDiagram:$SkipDiagram.IsPresent
Show-WinADGroupMember -Identity $ListGroups -HideHTML:$HideHTML.IsPresent -FilePath $FilePath -DisableBuiltinConditions:$DisableBuiltinConditions.IsPresent -Online:$Online.IsPresent -HideUsers:$HideUsers.IsPresent -HideComputers:$HideComputers.IsPresent -AdditionalStatistics:$AdditionalStatistics.IsPresent -Summary:$Summary.IsPresent -SkipDiagram:$SkipDiagram.IsPresent -EnableDiagramFiltering:$EnableDiagramFiltering.IsPresent -DiagramFilteringMinimumCharacters $DiagramFilteringMinimumCharacters -ScrollX:$ScrollX.IsPresent
} else {
Write-Warning -Message "Show-WinADGroupCritical - Requested group(s) not found."
}
Expand Down
33 changes: 23 additions & 10 deletions Public/Show-WinADGroupMember.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,15 @@
.PARAMETER SummaryOnly
Adds one tab with all groups together on two diagrams
.PARAMETER EnableDiagramFiltering
Enables search in diagrams. It's useful when there are many groups and it's hard to find the one you are looking for.
.PARAMETER DiagramFilteringMinimumCharacters
Minimum characters to start search in diagrams. Default is 3.
.PARAMETER ScrollX
Adds horizontal scroll to the table. Useful when there are many columns.
.EXAMPLE
Show-WinADGroupMember -GroupName 'Domain Admins' -FilePath $PSScriptRoot\Reports\GroupMembership1.html -Online -Verbose
Expand Down Expand Up @@ -80,7 +89,10 @@
[switch] $AdditionalStatistics,
[switch] $SkipDiagram,
[Parameter(ParameterSetName = 'Default')][switch] $Summary,
[Parameter(ParameterSetName = 'SummaryOnly')][switch] $SummaryOnly
[Parameter(ParameterSetName = 'SummaryOnly')][switch] $SummaryOnly,
[switch] $EnableDiagramFiltering,
[int] $DiagramFilteringMinimumCharacters = 3,
[switch] $ScrollX
)
$Script:Reporting = [ordered] @{}
$Script:Reporting['Version'] = Get-GitHubVersion -Cmdlet 'Show-WinADGroupMember' -RepositoryOwner 'evotecit' -RepositoryName 'ADEssentials'
Expand Down Expand Up @@ -127,9 +139,9 @@
try {
Write-Verbose "Show-WinADGroupMember - requesting $Group group nested membership"
if ($VisualizeOnly) {
$ADGroup = $GroupMembersCache[$Group]
[Array] $ADGroup = $GroupMembersCache[$Group]
} else {
$ADGroup = Get-WinADGroupMember -Group $Group -All -AddSelf -AdditionalStatistics:$AdditionalStatistics
[Array] $ADGroup = Get-WinADGroupMember -Group $Group -All -AddSelf -AdditionalStatistics:$AdditionalStatistics
}
if ($Summary -or $SummaryOnly) {
foreach ($Object in $ADGroup) {
Expand All @@ -146,11 +158,12 @@
# Means group returned something
$GroupName = $ADGroup[0].GroupName
$NetBIOSName = Convert-DomainFqdnToNetBIOS -DomainName $ADGroup[0].DomainName
$FullName = "$NetBIOSName\$GroupName"
$ObjectsCount = $ADGroup.Count - 1
$FullName = "$NetBIOSName\$GroupName ($ObjectsCount)"
} else {
# Means group returned nothing, probably wrong request, but we still need to show something
$GroupName = $Group
$FullName = $Group
$FullName = "$Group (0)"
}
$DataStoreID = -join ('table', (Get-RandomStringName -Size 10 -ToLower))
$DataTableID = -join ('table', (Get-RandomStringName -Size 10 -ToLower))
Expand All @@ -171,7 +184,7 @@
if ($Conditions) {
& $Conditions
}
}
} -ScrollX:$ScrollX.IsPresent
}
if (-not $SkipDiagram.IsPresent) {
New-HTMLTab -TabName 'Information' {
Expand All @@ -184,13 +197,13 @@
Write-Verbose -Message "Show-WinADGroupMember - processing HTML generation for $Group group - Diagram"
New-HTMLTab -TabName 'Diagram Basic' {
New-HTMLSection -Title "Diagram for $GroupName" {
New-HTMLGroupDiagramDefault -ADGroup $ADGroup -HideAppliesTo $HideAppliesTo -HideUsers:$HideUsers -HideComputers:$HideComputers -HideOther:$HideOther -DataTableID $DataTableID -ColumnID 1 -Online:$Online
New-HTMLGroupDiagramDefault -ADGroup $ADGroup -HideAppliesTo $HideAppliesTo -HideUsers:$HideUsers -HideComputers:$HideComputers -HideOther:$HideOther -DataTableID $DataTableID -ColumnID 1 -Online:$Online -EnableDiagramFiltering:$EnableDiagramFiltering.IsPresent -DiagramFilteringMinimumCharacters $DiagramFilteringMinimumCharacters
}
}
Write-Verbose -Message "Show-WinADGroupMember - processing HTML generation for $Group group - Diagram Hierarchy"
New-HTMLTab -TabName 'Diagram Hierarchy' {
New-HTMLSection -Title "Diagram for $GroupName" {
New-HTMLGroupDiagramHierachical -ADGroup $ADGroup -HideAppliesTo $HideAppliesTo -HideUsers:$HideUsers -HideComputers:$HideComputers -HideOther:$HideOther -Online:$Online
New-HTMLGroupDiagramHierachical -ADGroup $ADGroup -HideAppliesTo $HideAppliesTo -HideUsers:$HideUsers -HideComputers:$HideComputers -HideOther:$HideOther -Online:$Online -EnableDiagramFiltering:$EnableDiagramFiltering.IsPresent -DiagramFilteringMinimumCharacters $DiagramFilteringMinimumCharacters
}
}
}
Expand All @@ -202,12 +215,12 @@
New-HTMLTab -Name 'Summary' {
New-HTMLTab -TabName 'Diagram Basic' {
New-HTMLSection -Title "Diagram for Summary" {
New-HTMLGroupDiagramSummary -ADGroup $GroupsList -HideAppliesTo $HideAppliesTo -HideUsers:$HideUsers -HideComputers:$HideComputers -HideOther:$HideOther -DataTableID $DataTableID -ColumnID 1 -Online:$Online
New-HTMLGroupDiagramSummary -ADGroup $GroupsList -HideAppliesTo $HideAppliesTo -HideUsers:$HideUsers -HideComputers:$HideComputers -HideOther:$HideOther -DataTableID $DataTableID -ColumnID 1 -Online:$Online -EnableDiagramFiltering:$EnableDiagramFiltering.IsPresent -DiagramFilteringMinimumCharacters $DiagramFilteringMinimumCharacters
}
}
New-HTMLTab -TabName 'Diagram Hierarchy' {
New-HTMLSection -Title "Diagram for Summary" {
New-HTMLGroupDiagramSummaryHierarchical -ADGroup $GroupsList -HideAppliesTo $HideAppliesTo -HideUsers:$HideUsers -HideComputers:$HideComputers -HideOther:$HideOther -Online:$Online
New-HTMLGroupDiagramSummaryHierarchical -ADGroup $GroupsList -HideAppliesTo $HideAppliesTo -HideUsers:$HideUsers -HideComputers:$HideComputers -HideOther:$HideOther -Online:$Online -EnableDiagramFiltering:$EnableDiagramFiltering.IsPresent -DiagramFilteringMinimumCharacters $DiagramFilteringMinimumCharacters
}
}
}
Expand Down
Loading

0 comments on commit 0602b83

Please sign in to comment.