Skip to the main content.

PowerShell-Erfolgsrezepte – die Profi-Tipps für effektives Scripting

Konvertiere Hash-Tabellen in PowerShell Variablen

Müde vom Suchen in Hash-Tabellen? Hier kommt der Trick, wie du Konfigurationseinstellungen direkt als Variablen nutzt und deine Skripte so leicht lesbar machst.

Wandle Hash-Tabellen um in leicht lesbare Variablen

Im vorigen Tipp haben wir externe Konfigurationsdaten verwendet, die in einer *.psd1-Datei gespeichert waren, und sie mit Import-PowerShellDataFile in ein Skript importiert. Das hat gut funktioniert, aber Import-PowerShellDataFile gibt immer eine Hash-Tabelle zurück, so dass das Skript immer zuerst die Hash-Tabelle adressieren musste.

Lass uns versuchen, dies zu verbessern. Hier ist wieder die *.psd1 Datei:


@{
   # Pfade zu wichtigen Ordnern
   dataInPath = 'c:\data1', '\\server2\public\data'
   dataOutPath = '\\server99\public\results'
   dataLogPath = 'f:\local\log'

   # AD groups 
   dataGroups = 'Techniker', 'Prüfer', 'Auditoren'

   # Verschiedene Einstellungen
   dataTimeoutSeconds = 5400
   dataLogLevel = 4


 

Und dies ist das Skript, das im vorherigen Tipp verwendet wurde (stelle sicher, dass beide Dateien im selben Ordner gespeichert sind):


# data.psd1 muss sich im gleichen Ordner befinden
$dataPath = Join-Path -Path $PSScriptRoot -ChildPath data.psd1

# sicheres Lesen der psd1-Datei (Achtung: unsichere Lesevorgänge können Code innerhalb der psd1-Datei ausführen)
$dataHashtable = Import-PowerShellDataFile -Path $dataPath 

# Ausgabe der gesamten Hashtabelle
$dataHashtable | Out-GridView -Title 'Übersicht über alle importierten Daten aus der psd1-Datei'

# Einstellungen aus der Hashtabelle verwenden
$logLevel = $dataHashtable.datalogLevel
"Current Log Level = $logLevel"

$inPath = $dataHashtable.dataInPath
foreach ($item in $inPath)
{
    "Checking $item"


 

Lass uns nun eine einfache Filterfunktion hinzufügen, die eine (beliebige) Hashtabelle nimmt und jeden Schlüssel in eine Variable umwandelt. Hier ist ein solcher einfacher Filter:


filter Convert-HashtableToVariable
{
   foreach ($key in $_.Keys) { Set-Variable -Name $key -Value $_[$key] -Scope script }


 

Mit diesem Filter kann das obige Skript stark vereinfacht werden: durch einfaches Hinzufügen von Convert‑HashtableToVariable wird die Hash-Tabelle, die aus der *.psd1-Datei gelesen wurde, automatisch in skriptglobale Variablen umgewandelt, die sofort verwendet werden können. Man muss nicht mehr jedes Mal die benötigten Informationen aus einer Hash-Tabelle heraussuchen:


filter Convert-HashtableToVariable
{
   foreach ($key in $_.Keys) { Set-Variable -Name $key -Value $_[$key] -Scope script }
}

# data.psd1 muss sich im gleichen Ordner befinden
$dataPath = Join-Path -Path $PSScriptRoot -ChildPath data.psd1

# Hash-Tabellenschlüssel in Variablen umwandeln
Import-PowerShellDataFile -Path $dataPath | Convert-HashtableToVariable




# Skript kann nun alle Hash-Tabellenschlüssel wie Variablen verwenden
# Einstellungen aus der Hashtabelle verwenden
"Current Log Level = $datalogLevel"

foreach ($item in $dataInPath)
{
    "Checking $item"


 

Alle vier Tipps rund um das Thema 'Externe Konfigurationsdaten nutzen': 

Jeder Tipp baut schrittweise darauf auf, eine verwaltbarere, effizientere und sicherere Methode zur Handhabung von Konfigurationsdaten in PowerShell-Skripten zu schaffen, wobei von einfachen Hash-Tabellen zu fortgeschritteneren typsicheren Objekten übergegangen wird.

 

Good2know

Dein ultimativer PowerShell-Spickzettel

Entfessele das volle Potenzial von PowerShell mit unserem praktischen Poster. Egal, ob frischer Einsteiger oder erfahrener Profi, dieser Spickzettel ist so konzipiert, dass du schnell die wichtigsten und am häufigsten verwendeten Cmdlets findest.

Das Poster ist zum Download und in Papierform erhältlich.

PowerShell Poster 2023

Hol dir hier dein Poster!

 

 

Weiterführende Links 

 

Zusammenhängende Posts

3 min read

Skriptabbruch verhindern: PowerShell-Fehler clever behandeln

Da $error eine globale Variable ist, solltest du in Erwägung ziehen, eine eigene Protokollierungsvariable für die...

5 min read

Mehr Ordnung in PowerShell: lagere Konfigurationsdaten einfach aus

Verabschiede dich von fest codierten Pfaden und Einstellungen! Vereinfache deine PowerShell-Skripte, indem du...

3 min read

Stelle Fehlern eine Falle! Mit der Trap-Anweisung Terminating Errors abfangen

Du bist mit try...catch vertraut? Exceptions kannst du mit Trap-Anweisungen behandeln. Kurz und knackig kommt hier der...

Über den Autor: