Skip to the main content.

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

Nutze IntelliSense in PowerShell – von Hash-Tabellen zu intuitiven Objekten


Vereinfache deine PowerShell-Skripte, indem du Hash-Tabellen in Objekte umwandelst! Da sich alle Daten in einer Variablen befinden, kannst du IntelliSense-Unterstützung nutzen, sodass die Konfigurationsdaten leichter zu finden und zu verwenden sind.

Hash-Tabellen in Objekte umwandeln 

Im vorigen Tipp haben wir externe Konfigurationsdaten verwendet, die in einer *.psd1-Datei gespeichert waren, und sie mit Import-PowerShellDataFile in ein Skript importiert. Der Zugriff auf die *.psd1-Daten wurde vereinfacht, indem alle Hash-Tabellenschlüssel in leicht zugängliche skriptglobale Variablen umgewandelt wurden.

Es gibt noch eine weitere gute Alternative, die wir in diesem Tipp behandeln: die Umwandlung einer Hashtabelle in ein Objekt. Auf diese Weise hast du alle externen Informationen in einer Variablen, und IntelliSense hilft dir, die Informationen auszuwählen, die du benötigst.

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'

   # Diverse Einstellungen
   dataTimeoutSeconds = 5400
   dataLogLevel = 4


Und so sieht das Skript aus, das die *.psd1 Datei als Hash-Tabelle einliest (stelle sicher, dass beide Dateien im selben Ordner gespeichert sind):


# data.psd1 muss sich im selben 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 


Hash-Tabellen können in PowerShell leicht in Objekte umgewandelt werden, so dass du ein Objekt anstelle einer Hash-Tabelle erhalten:


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

# Hash-Tabellenschlüssel in Variablen umwandeln
$hashObject = [PSCustomObject](Import-PowerShellDataFile -Path $dataPath)
$hashObject | Out-GridView -Title 'Hashtabelle als Objekt'
$hashObject.dataLogLevel 


Als Objekt sind nun alle *.psd1-Daten in einem einzigen Objekt enthalten und werden als verschiedene Objekteigenschaften angezeigt. Dies vereinfacht die Codierung erheblich, da man nun IntelliSense erhält, sobald man "hashObject." eingibt, und eine Liste aller externen Eigenschaften erhält, die in der *.psd1-Datei vorhanden sind.

 

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...

2 min read

Bahn frei, schneller zum Ziel! Streame Fehler direkt zum Handler

Hier kommt die nächste Strategie zur Fehlerbehandlung, nachdem wir zuvor die Echtzeit und verzögerte Fehlerbehandlung...

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: