Private/Resolve-TBResourceType.ps1
|
function Resolve-TBResourceType { <# .SYNOPSIS Resolves a resource type to its canonical UTCM name. .DESCRIPTION Supports legacy aliases and stale identifiers. By default aliases are auto-migrated and logged as warnings. Unknown resource types throw. #> [CmdletBinding()] [OutputType([PSCustomObject])] param( [Parameter(Mandatory = $true)] [string]$ResourceType, [Parameter()] [switch]$StrictCanonical, [Parameter()] [hashtable]$WarningTracker ) $catalog = Get-TBUTCMCatalog $canonicalSet = @{} foreach ($resource in $catalog.Resources) { $canonicalSet[$resource.Name.ToLowerInvariant()] = $true } $inputType = $ResourceType.Trim() if (-not $inputType) { throw 'ResourceType cannot be empty.' } $normalized = $inputType.ToLowerInvariant() if ($canonicalSet.ContainsKey($normalized)) { return [PSCustomObject]@{ InputResourceType = $inputType CanonicalResourceType = $normalized WasAliased = $false } } $aliasMap = @{} foreach ($entry in $catalog.AliasMap.PSObject.Properties) { $aliasMap[$entry.Name.ToLowerInvariant()] = $entry.Value.ToLowerInvariant() } if ($aliasMap.ContainsKey($normalized)) { if ($StrictCanonical) { throw ("Resource type '{0}' is legacy. Use canonical name '{1}'." -f $inputType, $aliasMap[$normalized]) } if ($WarningTracker -and -not $WarningTracker.ContainsKey($normalized)) { $WarningTracker[$normalized] = $true Write-TBLog -Level 'Warning' -Message ("Resource type alias '{0}' is deprecated. Auto-migrating to '{1}'." -f $inputType, $aliasMap[$normalized]) } return [PSCustomObject]@{ InputResourceType = $inputType CanonicalResourceType = $aliasMap[$normalized] WasAliased = $true } } throw ("Unsupported UTCM resource type '{0}'. Use Get-TBResourceTypeRegistry to list canonical resource types." -f $inputType) } |