Public/Objects/Get-ADGroupsAndMembers.ps1
|
function Get-ADGroupsAndMembers { [CmdletBinding()] param( [string]$ObjectType = "Groups" ) try { Write-Log "Retrieving groups and members from cached data..." -Level Info Show-ProgressHelper -Activity "AD Inventory" -Status "Initializing group retrieval..." # Check if cached data is available if (-not $script:AllGroups) { Write-Log "No cached group data found." -Level Warning return $null } $groupObjects = Get-ADObjects -ObjectType $ObjectType -Objects $script:AllGroups -ProcessingScript { param($group) try { $groupObject = [PSCustomObject]@{ Name = $group.Name Description = $group.Description GroupCategory = $group.GroupCategory GroupScope = $group.GroupScope TotalNestedMemberCount = if ($group.Members) { $group.Members.Count } else { 0 } Members = $group.Members Created = $group.Created Modified = $group.Modified DistinguishedName = $group.DistinguishedName AccessStatus = "Success" } Add-Member -InputObject $groupObject -MemberType ScriptMethod -Name "ToString" -Value { "Name=$($this.Name); Category=$($this.GroupCategory); Scope=$($this.GroupScope); Members=$($this.TotalNestedMemberCount)" } -Force $groupObject } catch { Write-Log "Error processing group $($group.Name): $($_.Exception.Message)" -Level Warning $groupObject = [PSCustomObject]@{ Name = $group.Name Description = $group.Description GroupCategory = $group.GroupCategory GroupScope = $group.GroupScope TotalNestedMemberCount = 0 Members = @() Created = $group.Created Modified = $group.Modified DistinguishedName = $group.DistinguishedName AccessStatus = "Access Error: $($_.Exception.Message)" } Add-Member -InputObject $groupObject -MemberType ScriptMethod -Name "ToString" -Value { "Name=$($this.Name); Status=Error" } -Force $groupObject } } return $groupObjects } catch { Write-Log "Error retrieving groups: $($_.Exception.Message)" -Level Error } } |