Policies: ADMX-Presentation-Matching Hashtable-Bug behoben (PS7/Container)

Where-Object liefert bei einem Treffer ein Einzelobjekt. Ist das eine Hashtable
(PS7 ConvertFrom-Json -AsHashtable, wie im Docker-Container), war $sameType[0]
eine Schluessel-Suche nach Key 0 (=> $null) statt Array-Index -> Presentation
wurde als "nicht zuordenbar" gewertet und die Einstellung uebersprungen. Unter
Windows PowerShell 5.1 (PSCustomObjects) trat der Fehler nicht auf.
Fix: Where-Object-Ergebnis vor dem Indexieren in @() zwingen. Verifiziert per
Simulation gegen die realen Firefox-ADMX-Exportdaten (Default Search Engine,
URL for Home page).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-23 13:29:40 +02:00
co-authored by Claude Opus 4.8
parent 849cdd198e
commit 40e26b9f32
+8 -4
View File
@@ -538,14 +538,18 @@ function Resolve-TargetPresentationId {
} | Select-Object -First 1 } | Select-Object -First 1
if ($m) { return [string](Get-PolicyProp $m 'id') } if ($m) { return [string](Get-PolicyProp $m 'id') }
} }
# 2) i-te Ziel-Presentation gleichen Typs (in Reihenfolge) # 2) i-te Ziel-Presentation gleichen Typs (in Reihenfolge).
# WICHTIG: Ergebnis in @() zwingen - bei EINEM Treffer liefert Where-Object ein
# Einzelobjekt; ist das eine Hashtable (PS7 -AsHashtable), waere $x[0] eine
# Schluessel-Suche nach Key 0 (=> $null) statt Array-Index -> Fehlmatch.
$idx = 0; if ($Counter.ContainsKey($srcType)) { $idx = [int]$Counter[$srcType] } $idx = 0; if ($Counter.ContainsKey($srcType)) { $idx = [int]$Counter[$srcType] }
$sameType = @($TargetPres) | Where-Object { (& $norm (Get-PolicyProp $_ '@odata.type')) -eq $srcType } $sameType = @(@($TargetPres) | Where-Object { (& $norm (Get-PolicyProp $_ '@odata.type')) -eq $srcType })
$Counter[$srcType] = $idx + 1 $Counter[$srcType] = $idx + 1
if ($idx -lt @($sameType).Count) { return [string](Get-PolicyProp $sameType[$idx] 'id') } if ($idx -lt $sameType.Count) { return [string](Get-PolicyProp $sameType[$idx] 'id') }
# 3) Letzter Fallback: hat die Ziel-Definition genau EINE Presentation, nimm sie # 3) Letzter Fallback: hat die Ziel-Definition genau EINE Presentation, nimm sie
# (deckt Ein-Feld-Settings wie Textboxen zuverlaessig ab). # (deckt Ein-Feld-Settings wie Textboxen zuverlaessig ab).
if (@($TargetPres).Count -eq 1) { return [string](Get-PolicyProp $TargetPres[0] 'id') } $allTgt = @($TargetPres)
if ($allTgt.Count -eq 1) { return [string](Get-PolicyProp $allTgt[0] 'id') }
return $null return $null
} }