Praxisbeispiel: so setzen Sie PSDefaultParameterValues ein
Sie fragen sich vielleicht, warum das nützlich sein soll, lassen Sie es mich an einem kurzen Beispiel zeigen.
Angenommen, Sie exportieren immer Daten in CSV-Dateien, die jemand in Excel öffnen soll. Wenn er einfach auf Ihre CSV-Datei doppelklickt, wird das Ergebnis nicht besonders gut sein.
Abb. 1: Importierte Daten in Excel, bei denen die Trennzeichen anzeigt werden
Die meisten von uns würden dann einfach eine neue Excel-Datei öffnen und die Daten mit „Daten > Aus Text“ importieren, sich durch die Fülle von Bildschirmfenstern klicken und Excel so konfigurieren, dass es das Trennzeichen tatsächlich erkennt.
Abb. 2: Manuell editierter Daten-Import
Es gibt aber einen besseren Weg! Anstatt nur CSV zu exportieren:
Get-Process -Name Microsoft* | Export-Csv msproc.csv
können Sie ein benutzerdefiniertes Trennzeichen angeben und dabei Typinformationen und Klammern entfernen:
Get-Process -Name Microsoft* | Export-Csv bettermsproc.csv -Delimiter ";"
-NoTypeInformation -NoClobber
Jetzt wird beim Importieren, Exportieren, Konvertieren von und Konvertieren nach CSV das Trennzeichen ; verwendet und keine Typinformationen oder Klammern sind enthalten.
Wenn Sie die resultierende CSV-Datei direkt mit Excel öffnen, sehen Sie ein Ergebnis, das dem des Datenimport-Tanzes ähnelt, den wir vorher gemacht haben.
Abb. 3: Daten-Import nach Konfiguration mit PowerShell
Aber immer diese Parameter abzutippen ist umständlich und hat eine hohe Fehlertoleranz.
An dieser Stelle kommen die Standardwerte ins Spiel
$PSDefaultParams.Add("Export-Csv:Delimiter", ";")
$PSDefaultParams.Add("Export-Csv:NoTypeInformation", $true)
$PSDefaultParams.Add("Export-Csv:NoClobber", $true)
Damit können wir zurückgehen und einfach Export-Csv verwenden und die resultierende Datei wird in Excel genau wie erwartet geöffnet.
Wir könnten sogar noch einen Schritt weiter gehen und diese Parameter für alle Cmdlets in der CSV-Familie mithilfe von Platzhaltern ändern.
$PSDefaultParams.Add("*-Csv:Delimiter", ";")
$PSDefaultParams.Add("*-Csv:NoTypeInformation", $true)
$PSDefaultParams.Add("*-Csv:NoClobber", $true)