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...
PowerShell-Erfolgsrezepte – die Profi-Tipps für effektives Scripting
Verabschiede dich von fest codierten Pfaden und Einstellungen! Vereinfache deine PowerShell-Skripte, indem du Konfigurationsdaten getrennt mit Hash-Tabellen in *.psd1-Dateien speicherst.
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:
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.
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.
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.
Nov 26, 2024 by Aleksandar Nikolić und Dr. Tobias Weltner
Was ist der Unterschied zwischen Kodierung und Verschlüsselung? Dieser Artikel erklärt, welchen Zweck sie erfüllen und...
Nov 26, 2024 by Aleksandar Nikolić und Dr. Tobias Weltner
Wie gewährleistet Windows die Sicherheit von SecureString? Tauche mit uns im zweiten Artikel noch tiefer in die...
Nov 18, 2024 by Aleksandar Nikolić und Dr. Tobias Weltner
Denkst du, dass dein SecureString sicher ist? Nicht auf allen Plattformen! Entdecke die Risiken der...
Tobias Weltner und Aleksandar Nikolić haben gemeinsam die Blogpost-Reihe „Tobias&Aleksandars PowerShell-Tipps“ verfasst. Deshalb möchten wir euch beide hier vorstellen:
----------------------------
Aleksandar Nikolić ist ein Microsoft Azure MVP und Mitbegründer von PowerShellMagazine.com, der ultimativen Online-Ressource für PowerShell-Enthusiasten. Mit über 18 Jahren Erfahrung in der Systemadministration ist er ein angesehener Trainer und Redner, der rund um den Globus reist, um sein Wissen und seine Fähigkeiten über Azure, Entra und PowerShell weiterzugeben. Er hat auf IT-Veranstaltungen wie Microsoft Ignite, ESPC, NIC, CloudBrew, NTK und der PowerShell Conference Europe gesprochen.
----------------------------
Tobias ist ein langjähriger Microsoft MVP und war von Anfang an an der Entwicklung von PowerShell beteiligt. Er hat die PowerShell IDE „ISESteroids“ erfunden, zahlreiche Bücher über PowerShell für Microsoft Press und O'Reilly geschrieben, die PowerShell Conference EU (psconf.eu) gegründet und trägt derzeit als Mitglied der „Microsoft Cmdlet Working Group“ zur Weiterentwicklung der PowerShell bei. Tobias gibt sein Wissen als Berater in Projekten und als Trainer in Inhouse-Schulungen für zahlreiche Unternehmen und Agenturen in ganz Europa weiter.