IntuneManagement 4.0.0-beta1

This commit is contained in:
Mikael Karlsson
2026-09-23 19:13:09 +10:00
commit 7869619510
892 changed files with 577109 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
#ImportOrder 29
# Self-registration registry for the compare subsystem, mirroring
# [DocumentationRegistry]. Replaces the hardcoded $script:compare* arrays that
# Initialize-CompareModule used to build - which only the WPF AppInitialized
# handler ever ran, so in Avalonia mode the compare combos came up empty.
# Providers, output providers, and comparison types now register once at module
# load (Internal/Compare.ps1) so BOTH UI backends see the same catalog, and the
# documentation subsystem self-registers its own "doc" comparison type instead
# of Compare.ps1 reaching across with a Get-Command probe.
#
# Loaded at #ImportOrder 29 - before CompareClasses.ps1 (30) and
# CompareOutputClasses.ps1 (31) - so the provider/output classes it stores are
# already defined by the time Internal/Compare.ps1 registers instances.
#
# Dedupe is by .Value (a provider/output/type key), matching the
# DocumentationRegistry replace-by-identity semantics so Import-Module -Force
# re-registration never accumulates duplicates.
class CompareRegistry {
static [System.Collections.Generic.List[object]] $Providers = [System.Collections.Generic.List[object]]::new()
static [System.Collections.Generic.List[object]] $OutputProviders = [System.Collections.Generic.List[object]]::new()
static [System.Collections.Generic.List[PSCustomObject]] $ComparisonTypes = [System.Collections.Generic.List[PSCustomObject]]::new()
# ---- Compare providers (CompareProviderBase subclasses) ----
static [void] RegisterProvider([object]$Provider) {
if (-not $Provider.Value) { throw "Compare provider must have a Value" }
$existing = [CompareRegistry]::Providers | Where-Object { $_.Value -eq $Provider.Value }
if ($existing) { [CompareRegistry]::Providers.Remove($existing) | Out-Null }
[CompareRegistry]::Providers.Add($Provider)
}
static [object] FindProvider([string]$Value) {
return [CompareRegistry]::Providers | Where-Object { $_.Value -eq $Value } | Select-Object -First 1
}
# ---- Output providers (CompareOutputProviderBase subclasses) ----
static [void] RegisterOutputProvider([object]$Provider) {
if (-not $Provider.Value) { throw "Compare output provider must have a Value" }
$existing = [CompareRegistry]::OutputProviders | Where-Object { $_.Value -eq $Provider.Value }
if ($existing) { [CompareRegistry]::OutputProviders.Remove($existing) | Out-Null }
[CompareRegistry]::OutputProviders.Add($Provider)
}
static [object] FindOutputProvider([string]$Value) {
return [CompareRegistry]::OutputProviders | Where-Object { $_.Value -eq $Value } | Select-Object -First 1
}
static [object] FindOutputProviderByExtension([string]$Extension) {
return [CompareRegistry]::OutputProviders | Where-Object { $_.Extension -eq $Extension } | Select-Object -First 1
}
# ---- Comparison types (PSCustomObject: Name, Value, [Compare], [RemoveProperties]) ----
static [void] RegisterComparisonType([PSCustomObject]$Type) {
if (-not $Type.Value) { throw "Comparison type must have a Value" }
$existing = [CompareRegistry]::ComparisonTypes | Where-Object { $_.Value -eq $Type.Value }
if ($existing) { [CompareRegistry]::ComparisonTypes.Remove($existing) | Out-Null }
[CompareRegistry]::ComparisonTypes.Add($Type)
}
static [PSCustomObject] FindComparisonType([string]$Value) {
return [CompareRegistry]::ComparisonTypes | Where-Object { $_.Value -eq $Value } | Select-Object -First 1
}
# Clear every collection. Called once at the top of the module-load
# registration in Internal/Compare.ps1 so Import-Module -Force starts clean
# (the static initializers above only run on first type load; the type is
# cached across -Force reimports).
static [void] Reset() {
[CompareRegistry]::Providers.Clear()
[CompareRegistry]::OutputProviders.Clear()
[CompareRegistry]::ComparisonTypes.Clear()
}
}