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...
PowerShell-Erfolgsrezepte – die Profi-Tipps für effektives Scripting
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.
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"
}
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.
Okt 17, 2024 by Aleksandar Nikolić und Dr. Tobias Weltner
Da $error eine globale Variable ist, solltest du in Erwägung ziehen, eine eigene Protokollierungsvariable für die...
Okt 30, 2024 by Aleksandar Nikolić und Dr. Tobias Weltner
Verabschiede dich von fest codierten Pfaden und Einstellungen! Vereinfache deine PowerShell-Skripte, indem du...
Okt 10, 2024 by Aleksandar Nikolić und Dr. Tobias Weltner
Du bist mit try...catch vertraut? Exceptions kannst du mit Trap-Anweisungen behandeln. Kurz und knackig kommt hier 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.