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:
170
Functions/Get-TemplatePreviewData.ps1
Normal file
170
Functions/Get-TemplatePreviewData.ps1
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user