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,152 @@
function Export-Hashtable {
<#
.SYNOPSIS
Exportiert einen PowerShell Hashtable als valide PSD1-Datei.
.DESCRIPTION
Diese Funktion konvertiert einen PowerShell Hashtable in eine gültige PSD1-Datei
mit korrekter Formatierung und Einrückung.
.PARAMETER Hashtable
Der zu exportierende Hashtable
.PARAMETER Path
Der Pfad zur Ziel-PSD1-Datei
.PARAMETER Indent
Die Anzahl der Leerzeichen für die Einrückung (Standard: 4)
.EXAMPLE
$data = @{
ModuleName = "MeinModul"
Version = "1.0.0"
Author = "Max Mustermann"
Settings = @{
Debug = $true
MaxRetries = 3
}
}
Export-Hashtable -Hashtable $data -Path "C:\config.psd1"
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[System.Collections.Hashtable]$Hashtable,
[Parameter(Mandatory = $true)]
[System.String]$Path,
[Parameter(Mandatory = $false)]
[Int]$Indent = 4
)
function ConvertTo-Psd1String {
param(
[Parameter(Mandatory = $true)]
$Object,
[Parameter(Mandatory = $false)]
[int]$Level = 0
)
$indentStr = " " * ($Indent * $Level)
$nextIndentStr = " " * ($Indent * ($Level + 1))
if ($null -eq $Object) {
return "`$null"
}
switch ($Object.GetType().Name) {
"Hashtable" {
if ($Object.Count -eq 0) {
return "@{}"
}
$lines = @("@{")
foreach ($key in ($Object.Keys)) {
$value = ConvertTo-Psd1String -Object $Object[$key] -Level ($Level + 1)
$lines += "$nextIndentStr$key = $value"
}
$lines += "$indentStr}"
return ($lines -join "`r`n")
}
"Object[]" {
if ($Object.Count -eq 0) {
return "@()"
}
$lines = @("@(")
foreach ($item in $Object) {
$value = ConvertTo-Psd1String -Object $item -Level ($Level + 1)
$lines += "$nextIndentStr$value"
}
$lines += "$indentStr)"
return ($lines -join "`r`n")
}
"ArrayList" {
return ConvertTo-Psd1String -Object $Object.ToArray() -Level $Level
}
"String" {
# Escape für einfache Anführungszeichen
$escaped = $Object -replace "'", "''"
return "'$escaped'"
}
"Boolean" {
return "`$$Object"
}
"Int32" {
return $Object.ToString()
}
"Int64" {
return $Object.ToString()
}
"Double" {
return $Object.ToString()
}
default {
if ($Object -is [Array]) {
return ConvertTo-Psd1String -Object @($Object) -Level $Level
}
# Fallback für andere Typen
return "'$Object'"
}
}
}
try {
$psd1Content = ConvertTo-Psd1String -Object $Hashtable
# Stelle sicher, dass das Verzeichnis existiert
$directory = Split-Path -Path $Path -Parent
if ($directory -and -not (Test-Path -Path $directory)) {
New-Item -Path $directory -ItemType Directory -Force | Out-Null
}
# Schreibe die Datei mit UTF8-BOM Encoding (Standard für PSD1)
$psd1Content | Out-File -FilePath $Path -Encoding utf8 -Force
Write-Verbose "Hashtable erfolgreich nach '$Path' exportiert"
# Validiere die erstellte PSD1-Datei
try {
$null = Import-PowerShellDataFile -Path $Path
Write-Verbose "PSD1-Datei erfolgreich validiert"
}
catch {
Write-Warning "Die erstellte PSD1-Datei konnte nicht validiert werden: $_"
}
}
catch {
Write-Error "Fehler beim Exportieren des Hashtables: $_"
throw
}
}