Skip to the main content.

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

Mehr Ordnung in PowerShell: lagere Konfigurationsdaten einfach aus


Verabschiede dich von fest codierten Pfaden und Einstellungen! Vereinfache deine PowerShell-Skripte, indem du Konfigurationsdaten getrennt mit Hash-Tabellen in *.psd1-Dateien speicherst.

Nutze Hash-Tabellen zum Auslagern von Config Data

Oft benötigen Skripte Konfigurationsinformationen, die sich ändern können, z. B. Pfade zu relevanten Ordnern, Gruppennamens, und mehr.

Es ist immer ratsam, solche Informationen vom Code zu trennen, und ein einfacher Ansatz ist die Verwendung von *.psd1-Dateien. Wir geben vier Tipps (als eine Art "Miniserie") und schauen uns leistungsstarke und dennoch einfache Techniken an, mit denen du Konfigurationsdaten von Code trennen kannst.

Werfen wir einen Blick auf das offizielle PowerShell-Dateiformat: *.psd1-Dateien enthalten immer genau eine Hash-Tabellenstruktur, d.h.:


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

   # AD-Gruppen
   dataGroups = 'Technicians', 'Testers', 'Auditors'

   # Diverse Einstellungen / misc settings
   dataTimeoutSeconds = 5400
   dataLogLevel = 4

Hinweis: Du musst den Schlüsseln der Hash-Tabellen kein Präfix wie "data" voranstellen, allerdings kann ein solches Präfix später helfen, Informationen, die du aus einer externen *.psd1-Datei importiert hast, leicht zu identifizieren.

Hash-Tabellen unterstützen alle relevanten PowerShell-Datentypen, können Arrays (Listen) definieren und zur besseren Wartung auch kommentiert werden.

Es gibt verschiedene Cmdlets und .NET-APIs zum Lesen von *.psd1-Inhalten, und die Wahl der richtigen Technik ist entscheidend: Da *.psd1-Dateien aktive Befehle enthalten können, kann das Lesen von *.ps1-Dateien mit unsicheren Befehlen versehentlich eingebetteten Code aufrufen.

Deshalb solltest du Cmdlets verwenden, die sich auf das sichere Lesen konzentrieren, wie Import-PowerShellDataFile.

Wenn du die obige Hash-Tabelle in einer Datei mit dem Namen data.psd1 speichern und diese Datei neben dem folgenden Skript platzieren, würde das Skript die Daten sicher aus der *.psd1-Datei lesen und als Hash-Tabelle anzeigen (stelle sicher, dass du das Skript auch in einer Datei speicherst – führe keine "unbenannten" Skripte aus):


# 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 Hash-Tabelle
$dataHashtable | Out-GridView -Title 'Übersicht über alle importierten Daten aus psd1-Datei'

# Einstellungen aus der Hashtabelle verwenden
$logLevel = $dataHashtable['datalogLevel']
"Current Log Level = $logLevel"

$inPath = $dataHashtable['dataInPath']
foreach ($item in $inPath)
{
    "Checking $item"


Extra-Tipp:
Import‑PowerShellDataFile stellt sicher, dass keine gefährliche *.psd1‑Datei versehentlich unerwünschte Aktionen auslösen kann. Dieser Befehl wurde in PowerShell 5 als Funktion hinzugefügt, sodass du in Windows PowerShell den Quellcode so prüfen kannst:

  • ${function:Import-PowerShellDataFile} | Set-ClipBoard ${function:Import-PowerShellDataFile} | Set-ClipBoard


Diese Zeile kopiert den gesamten Quellcode in Ihre Zwischenablage, von wo aus du ihn in den PowerShell-Editor deiner Wahl einfügen kannst. Das ist komplexer, aber großartiger Code, der veranschaulicht, wie du die Struktur des PowerShell-Codes mithilfe des internen Parsers überprüfen kannst und vieles mehr.

In PowerShell 7 ist der Befehl jetzt als binäres Cmdlet implementiert, sodass du den Quellcode nicht mehr auf diese Weise anzeigen kannst.

 

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

6 min read

Kodierung vs. Verschlüsselung: Was schützt wirklich?

Was ist der Unterschied zwischen Kodierung und Verschlüsselung? Dieser Artikel erklärt, welchen Zweck sie erfüllen und...

6 min read

SecureString – mehr Sicherheit auf verschiedenen Plattformen

Wie gewährleistet Windows die Sicherheit von SecureString? Tauche mit uns im zweiten Artikel noch tiefer in die...

6 min read

Sicherheitsrisiken bei cross-platform Encryption mit .NET SecureString

Denkst du, dass dein SecureString sicher ist? Nicht auf allen Plattformen! Entdecke die Risiken der...

Über den Autor: