Initial commit

This commit is contained in:
Torsten Brendgen
2026-04-13 15:40:51 +02:00
commit 01a535eb39
17 changed files with 4897 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
function Import-OrderedPowerShellDataFile {
param(
[Parameter(Mandatory)]
[string]$Path
)
function ConvertTo-OrderedHashtable {
param(
$HashtableAst
)
# Verwende OrderedDictionary statt [ordered]@{}
$ordered = New-Object System.Collections.Specialized.OrderedDictionary
# Sortiere KeyValuePairs nach ihrer Position im Quelltext
$sortedKvps = $HashtableAst.KeyValuePairs | Sort-Object { $_.Item1.Extent.StartOffset }
foreach ($kvp in $sortedKvps) {
# Schlüssel extrahieren
$key = $kvp.Item1.Extent.Text -replace '[''"]', ''
# Wert verarbeiten
$valueAst = $kvp.Item2
# Suche nach HashtableAst in PipelineAst
$hashtable = $null
if ($valueAst -is [System.Management.Automation.Language.HashtableAst]) {
$hashtable = $valueAst
}
elseif ($valueAst -is [System.Management.Automation.Language.PipelineAst]) {
# Suche HashtableAst innerhalb der Pipeline
$hashtable = $valueAst.Find({
$args[0] -is [System.Management.Automation.Language.HashtableAst]
}, $false)
}
if ($hashtable) {
$value = ConvertTo-OrderedHashtable -HashtableAst $hashtable
}
elseif ($valueAst -is [System.Management.Automation.Language.ArrayLiteralAst]) {
$value = @()
foreach ($element in $valueAst.Elements) {
if ($element -is [System.Management.Automation.Language.HashtableAst]) {
$value += ConvertTo-OrderedHashtable -HashtableAst $element
}
else {
$value += Invoke-Expression $element.Extent.Text
}
}
}
else {
try {
$value = Invoke-Expression $valueAst.Extent.Text
}
catch {
$value = $valueAst.Extent.Text
}
}
$ordered.Add($key, $value)
}
return $ordered
}
# Datei parsen
$errors = $null
$tokens = $null
$ast = [System.Management.Automation.Language.Parser]::ParseFile(
$Path,
[ref]$tokens,
[ref]$errors
)
if ($errors) {
throw "Fehler beim Parsen der Datei: $($errors[0].Message)"
}
# Finde die oberste Hashtable
$hashtableAst = $ast.Find({
$args[0] -is [System.Management.Automation.Language.HashtableAst]
}, $true)
if (-not $hashtableAst) {
throw "Keine Hashtable in der Datei gefunden"
}
return ConvertTo-OrderedHashtable -HashtableAst $hashtableAst
}