Private/Helpers/Get-CollectionStatistics.ps1
|
function Get-CollectionStatistics { [CmdletBinding()] param( [Parameter(Mandatory)] [object[]]$Data, [Parameter(Mandatory)] [ValidateSet('Users', 'Groups', 'Computers')] [string]$ObjectType, [switch]$IncludeAccessStatus ) $stats = [PSCustomObject]@{ ObjectType = $ObjectType TotalCount = $Data.Count OUDistribution = @{} SuccessCount = if ($IncludeAccessStatus) { ($Data | Where-Object { $_.AccessStatus -eq 'Success' }).Count } else { 0 } ErrorCount = if ($IncludeAccessStatus) { ($Data | Where-Object { $_.AccessStatus -ne 'Success' }).Count } else { 0 } } # Count objects per OU $Data | ForEach-Object { $ouPath = ($_.DistinguishedName -split ',(?=OU=)' | Where-Object { $_ -match '^OU=' }) -join ',' if (-not $ouPath) { $ouPath = "No OU (Root)" } if ($stats.OUDistribution.ContainsKey($ouPath)) { $stats.OUDistribution[$ouPath]++ } else { $stats.OUDistribution[$ouPath] = 1 } } # Add DisplayStatistics method Add-Member -InputObject $stats -MemberType ScriptMethod -Name DisplayStatistics -Value { Write-Host "`n=== $($this.ObjectType) Collection Statistics ===" Write-Host "Total $($this.ObjectType): $($this.TotalCount)" if ($this.SuccessCount -gt 0 -or $this.ErrorCount -gt 0) { Write-Host "Successfully Processed: $($this.SuccessCount)" Write-Host "Errors: $($this.ErrorCount)" } # Write-Host "`nDistribution by OU:" # $this.OUDistribution.GetEnumerator() | Sort-Object Name | ForEach-Object { # Write-Host (" - {0,-50} : {1,5}" -f $_.Key, $_.Value) # } } return $stats } |