- 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.
171 lines
5.0 KiB
PowerShell
171 lines
5.0 KiB
PowerShell
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
|
|
}
|