Refactor configuration data export and template loading functions

- Updated Export-ConfigurationData to use resolved configuration data directly and added error handling for missing data.
- Enhanced Load-Templates to streamline category loading and improve error handling for missing template directories.
- Removed Merge-ConfigurationData function as it is no longer needed.
- Refactored Merge-Templates to improve merging logic and handle default files more effectively.
- Introduced Get-TemplatePreviewData function to handle template preview data retrieval and merging.
- Added Import-OrderedPowerShellDataFile function to support ordered hashtable imports.
- Updated Update-ParametersPanel to handle parameter and variable tab updates more efficiently.
- Improved Update-TreeView to handle cases where resources are not found.
- Added new parameters to Environment.Default.psd1 for Active Directory configuration.
- Created new template BGW-LAN.psd1 for domain configuration.
This commit is contained in:
Torsten Brendgen
2026-06-29 22:16:05 +02:00
parent 6986570510
commit 1a4ba96dc8
13 changed files with 689 additions and 4456 deletions

View File

@@ -0,0 +1,170 @@
function Get-TemplatePreviewData {
[CmdletBinding()]
Param(
[Parameter(Mandatory = $true)]
[string]
$TemplatePath
)
if (-not (Test-Path -Path $TemplatePath -PathType Leaf)) {
throw "Template nicht gefunden: $TemplatePath"
}
$directory = Split-Path -Path $TemplatePath -Parent
$defaultFiles = @(Get-ChildItem -Path $directory -Filter "*.psd1" -File -ErrorAction SilentlyContinue |
Where-Object { $_.BaseName -eq "Default" -or $_.BaseName -like "*.Default" } |
Sort-Object Name)
$mergeFiles = @()
$mergeFiles += @($defaultFiles | ForEach-Object { $_.FullName })
$mergeFiles += $TemplatePath
$mergedConfigurationData = $null
foreach ($file in $mergeFiles) {
$templateData = Import-PowerShellDataFile -Path $file -ErrorAction Stop
if ($null -eq $mergedConfigurationData) {
$mergedConfigurationData = $templateData
}
else {
$mergedConfigurationData = Merge-DSCConfigurationData -Template $mergedConfigurationData -Deployment $templateData
}
}
$resolvedConfigurationData = $null
$resolveError = $null
try {
$resolvedConfigurationData = Resolve-DSCConfigurationData -ConfigurationData $mergedConfigurationData -ErrorAction Stop
}
catch {
$resolveError = $_
}
$displayOrder = $null
if (Get-Command -Name Import-OrderedPowerShellDataFile -ErrorAction SilentlyContinue) {
foreach ($file in $mergeFiles) {
$orderedTemplateData = Import-OrderedPowerShellDataFile -Path $file -ErrorAction Stop
if ($null -eq $displayOrder) {
$displayOrder = $orderedTemplateData
}
else {
$displayOrder = Merge-TemplatePreviewOrder -Base $displayOrder -Override $orderedTemplateData
}
}
}
$displaySource = if ($null -ne $resolvedConfigurationData) { $resolvedConfigurationData } else { $mergedConfigurationData }
$displayConfigurationData = ConvertTo-TemplatePreviewDisplayOrder -Value $displaySource -Order $displayOrder
[PSCustomObject]@{
Files = $mergeFiles
Merged = $mergedConfigurationData
Resolved = $resolvedConfigurationData
Display = $displayConfigurationData
ResolveError = $resolveError
}
}
function Test-TemplatePreviewDictionaryKey {
Param(
[Parameter(Mandatory = $true)]
[System.Collections.IDictionary]
$Dictionary,
[Parameter(Mandatory = $true)]
[string]
$Key
)
if ($Dictionary -is [System.Collections.Specialized.OrderedDictionary]) {
return $Dictionary.Contains($Key)
}
return $Dictionary.ContainsKey($Key)
}
function Merge-TemplatePreviewOrder {
Param(
[AllowNull()]
$Base,
[AllowNull()]
$Override
)
if ($Base -is [System.Collections.IDictionary] -and $Override -is [System.Collections.IDictionary]) {
$ordered = New-Object System.Collections.Specialized.OrderedDictionary
foreach ($key in $Base.Keys) {
if (Test-TemplatePreviewDictionaryKey -Dictionary $Override -Key $key) {
$ordered.Add($key, (Merge-TemplatePreviewOrder -Base $Base[$key] -Override $Override[$key]))
}
else {
$ordered.Add($key, $Base[$key])
}
}
foreach ($key in $Override.Keys) {
if (-not (Test-TemplatePreviewDictionaryKey -Dictionary $ordered -Key $key)) {
$ordered.Add($key, $Override[$key])
}
}
return $ordered
}
return $Override
}
function ConvertTo-TemplatePreviewDisplayOrder {
Param(
[AllowNull()]
$Value,
[AllowNull()]
$Order
)
if ($Value -is [System.Collections.IDictionary]) {
$ordered = New-Object System.Collections.Specialized.OrderedDictionary
$orderedKeys = @()
if ($Order -is [System.Collections.IDictionary]) {
foreach ($key in $Order.Keys) {
if (Test-TemplatePreviewDictionaryKey -Dictionary $Value -Key $key) {
$orderedKeys += $key
$ordered.Add($key, (ConvertTo-TemplatePreviewDisplayOrder -Value $Value[$key] -Order $Order[$key]))
}
}
}
foreach ($key in $Value.Keys) {
if ($orderedKeys -notcontains $key) {
$ordered.Add($key, (ConvertTo-TemplatePreviewDisplayOrder -Value $Value[$key] -Order $null))
}
}
return $ordered
}
if ($Value -is [System.Collections.IEnumerable] -and -not ($Value -is [string])) {
$items = @()
$index = 0
foreach ($item in $Value) {
$itemOrder = $null
if ($Order -is [System.Array] -and $Order.Count -gt $index) {
$itemOrder = $Order[$index]
}
$items += ,(ConvertTo-TemplatePreviewDisplayOrder -Value $item -Order $itemOrder)
$index++
}
return ,$items
}
return $Value
}