• Blog
  • Webinare
  • Partner
  • Support
  • Kontakt
  • DE
    • EN
ScriptRunner
  • Über uns
    • Team
    • Jobs
    • Presse
  • Warum
  • Praxisbeispiele
  • Software
    • ScriptRunner Server
    • ScriptRunner Portal
    • ScriptRunner Portal Widget
    • ScriptRunner Connectoren
    • ScriptRunner ActionPacks
  • Jetzt testen
  • Suche
  • Menü Menü
Du bist hier: Startseite1 / ScriptRunner Blog2 / News3 / PowerShell PSDefaultParameterValues

PowerShell PSDefaultParameterValues

Author: Marco Kamner | Lesezeit: 6 Minuten | Category: News, Scripting

PSDefaultParameterValues ist eine Hashtabelle, mit der wir die Standardwerte eines beliebigen Parameters für ein beliebiges Cmdlet mit den von uns gewünschten Standardwerten überschreiben können.

Das Cmdlets verwendet dann den benutzerdefinierten Standardwert, sofern im Befehl kein anderer Wert angeben wird.

Das klingt vielleicht nicht nach der wichtigsten Funktion, aber glauben Sie mir, nach diesem Beitrag werden Sie sich fragen, wie Sie jemals ohne sie gearbeitet haben.

Inhalt

  • So verwenden Sie PowerShell PSDefaultParameterValues
  • Praxisbeispiel: so setzen Sie PSDefaultParameterValues ein
  • PSDefaultParameterValues in Scripten
  • Weiterführende Links
Artikel: PowerShel PSDefaultParameterValues

So verwenden Sie PowerShell PSDefaultParameterValues

Parameter

Schauen wir uns genauer an, wie man einen Standardwert festlegt.

$PSDefaulParameterValues.Add("Command:Parameter","Value")

Wie Sie sehen können, fügen wir einfach einen neuen Schlüssel zur Hashtabelle hinzu und geben das Cmdlet und den Parameter an, für den ein Standardwert festgelegt werden soll, getrennt durch ein : .

Der Wert muss natürlich von einem Typ sein, der vom Parameter akzeptiert wird, sonst erhalten Sie Fehler bei der Verwendung des Cmdlets.
Ein konkretes Beispiel wäre die Angabe eines benutzerdefinierten Trennzeichens für Write-Host.

# Default PS> Write-Host "Hello","World" 
Hello World 
# Ergänzen der benutzerdefinierten Vorgabe 
PS> $PSDefaultParameterValues.Add("Write-Host:Separator", "`n") 
# Geänderte Ausgabe 
PS> Write-Host "Hello","World" 
Hello 
World

Switches

Für Switch-Parameter gilt fast dasselbe, wir verwenden nur einen Booleschen Wert, um anzugeben, ob der Schalter vorhanden $true oder nicht vorhanden $false sein soll.

Wir könnten ihn z. B. verwenden, um das Debugging für alle Invoke-WebRequest-Aufrufe in einem Skript auf einmal zu aktivieren.

# Standard, keine Verbosität
PS> (Invoke-WebRequest "https://ps1.guru").StatusCode
200 
# Ergänzen der benutzerdefinierten Vorgabe
PS> $PSDefaultParameterValues.Add("Invoke-WebRequest:Verbose", $true)
# Geänderte Ausgabe, mit Verbosität 
PS> (Invoke-WebRequest "https://ps1.guru").StatusCode 
VERBOSE: GET https://ps1.guru/ with 0-byte payload 
VERBOSE: received 4801-byte response of content type text/html
200

Wildcards

Wir bleiben beim Verbose-Parameter aus dem vorherigen Beispiel und können ihn mit Platzhaltern für alle Cmdlets festlegen. Dies ist ein nützlicher Trick, den ich häufig zum Debuggen meiner Scripts verwende.

PS> $PSDefaultParameterValues.Add("*:Verbose", $true)

Erweiterte Werte

Anstelle eines statischen Werts ist es möglich, einen Scriptblock als Vorgabe für einen Parameter zu verwenden. Dies ermöglicht ein extremes Maß an Anpassung in Abhängigkeit von Systemzuständen wie dem Host, auf dem Sie sich befinden, dem aktuellen Verzeichnis und vielem mehr.

Um bei unserem Verbosität-Beispiel von vorhin zu bleiben, könnten wir das Verhalten von einer Variable $verbose abhängig machen.

PS> $PSDefaultParameterValues.Add("*:Verbose", {$verbose -eq $true})

Jetzt können wir die standardmäßige Verbosität unserer Sitzung durch Setzen und Entfernen einer Variable steuern. Denken Sie daran, dass dieser Scriptblock jedes Mal ausgeführt wird, wenn Sie das Cmdlet verwenden, also halten Sie ihn schnell.

Sie können ihn wie folgt messen:

PS> Measure-Command {$verbose -eq $true} | ft
Days Hours Minutes Seconds Milliseconds
---- ----- ------- ------- ------------
0    0     0       0       0

Beständigkeit

Alles, was wir bis jetzt gemacht haben, bleibt nicht zwischen Sitzungen bestehen. Damit die Standardwerte dies tun, müssen Sie sie zu Ihrem Profil hinzufügen. Um alle Vorgaben zu finden, die Sie in der aktuellen Sitzung hinzugefügt haben, fragen Sie einfach die Historie wie folgt ab.

Get-History | Where-Object CommandLine -like "`$PSDEfaultParameterValues*"

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.

Screenshot eines Excel-Datenblatts. Zu sehen sind mehrere Zeilen unstrukturierter Daten.

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.

Screenshot eines Excel-Datenblatts. Zu sehen sind mehrere Zeilen Daten, deren Importeinstellungen manuell so editiert wurden, dass Trennzeichen erkennt und korrekt interpretiert wurden

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.

Screenshot eines Excel-Datenblatts. Zu sehen mehrere Zeilen mit Daten die klar strukturiert sind, ähnlich dem Beispiel in Abbildung 2

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)

PSDefaultParameterValues in Scripten

Nachdem Sie nun etwas über $PSDefaulParameterValues erfahren haben, möchte ich Sie warnen –  verwenden Sie sie bitte nicht in Ihren Scripts.

Dafür gibt es einige gute Gründe:

  • Andere Anwender haben möglicherweise nicht dieselben Standardwerte wie Sie und deshalb wird das Script für sie nicht funktionieren
  • Sie könnten Ihre Voreinstellungen im Laufe der Zeit ändern und das Script wird für Sie nicht mehr funktionieren

Um dies zu vermeiden, empfehle ich Ihnen PSDefaultParameterValues zuerst in allen Scripten zu deaktivieren:

# Disable PSDefaultParameterValues 
$PSDefaultParameterValues.Add("Disabled", $true)

Und sie am Ende wieder zu aktivieren:

# Re-Enable PSDefaultParameterValues 
$PSDefaultParameterValues.Remove("Disabled")

Weiterführende Links

  • about_Parameters_Default_Values – PowerShell | Microsoft Docs
  • Use PowerShell Default Parameter Values to Simplify Scripts | Scripting Blog
Share this article
  • Teilen auf Facebook
  • Teilen auf Twitter
  • Teilen auf WhatsApp
  • Teilen auf LinkedIn
  • Teilen auf Reddit
  • Per E-Mail teilen

Diese Beiträge könnten Sie auch interessieren:

Artikelbild: PowerShell kurz & gut – Buchrezension von Benedikt GräbScriptRunner Software GmbH

PowerShell kurz & gut – Buchrezension

7. April 2021
Weiterlesen
https://www.scriptrunner.com/wp-content/uploads/2021/04/buch-powershell-kurz-gut2.jpg 1000 1000 Benedikt Gräb https://www.scriptrunner.com/wp-content/uploads/2018/05/ScriptRunner_Logo_RGB-300x45.png Benedikt Gräb2021-04-07 10:00:352021-04-07 17:10:11PowerShell kurz & gut – Buchrezension
Artikelbild: 5 PowerShell-Scripting Best PracticesScriptRunner Software GmbH

5 PowerShell Scripting Best Practices – Vom lauffähigen zum professionellen Code

10. März 2021
Weiterlesen
https://www.scriptrunner.com/wp-content/uploads/2021/03/powershell-best-practices.png 1000 1000 Philip Lorenz https://www.scriptrunner.com/wp-content/uploads/2018/05/ScriptRunner_Logo_RGB-300x45.png Philip Lorenz2021-03-10 10:00:402021-03-10 15:20:345 PowerShell Scripting Best Practices – Vom lauffähigen zum professionellen Code
Artikel: Drei beliebte PowerShell-Editoren im ÜberblickScriptRunner Software GmbH

Software-Spotlight: Drei beliebte PowerShell-Editoren im Überblick

10. Februar 2021
Weiterlesen
https://www.scriptrunner.com/wp-content/uploads/2021/02/powershell-editors.gif 1000 1000 Adam Bertram https://www.scriptrunner.com/wp-content/uploads/2018/05/ScriptRunner_Logo_RGB-300x45.png Adam Bertram2021-02-10 10:00:152021-02-10 09:38:02Software-Spotlight: Drei beliebte PowerShell-Editoren im Überblick

Über den Autor:

Portrait des ScriptRunner Autors Marco Kamner
Marco Kamner

Marco ist im Herzen ein DevOps-Ingenieur und verwendet PowerShell in Kombination mit anderen Stacks, um die Bereitstellung zu automatisieren, Datenanalysen durchzuführen und Unternehmen in die Cloud zu bringen.
Er verwendet PowerShell seit 2018 auf allen Plattformen als seine primäre Befehlszeile und versucht immer, mehr Leute dazu zu bewegen, von bash und anderen zu wechseln.

Neuste Beiträge

  • Artikelbild: PowerShell kurz & gut – Buchrezension von Benedikt GräbScriptRunner Software GmbHPowerShell kurz & gut – Buchrezension7. April 2021 - 10:00
  • Artikel: ScriptRunner sponsert den PowerShell + DevOps Global Summit 2021ScriptRunner Software GmbHScriptRunner sponsert den PowerShell + DevOps Global Summit 202119. März 2021 - 10:00
  • ScriptRunner ActionPack für CitrixScriptRunner Software GmbHScriptRunner ActionPack für Citrix11. März 2021 - 11:01
  • Artikelbild: 5 PowerShell-Scripting Best PracticesScriptRunner Software GmbH5 PowerShell Scripting Best Practices – Vom lauffähigen zum professionellen Code10. März 2021 - 10:00
  • Artikelbild: Vorschau auf das Produktjahr 2021ScriptRunner Software GmbHVorschau auf das Produktjahr 20219. März 2021 - 11:20

Produkt

  • ScriptRunner Plattform
  • ScriptRunner ActionPacks
  • ScriptRunner Server
  • ScriptRunner Portal
  • ScriptRunner Portal Widget
  • ScriptRunner Apps
  • ScriptRunner Connectoren
  • Lizenzierung
Jetzt kostenfrei testen

Lösungen

  • IT-Administratoren
  • IT-Teamleiter
  • Use Cases

Ressourcen

  • Blog
  • Dokumentation
  • Knowledge Base
  • Webinare
  • PowerShell-Lexicon
  • PowerShell-Poster
  • PowerShell Security Ebook

Unternehmen

  • Über uns
  • Team
  • Jobs
  • Presse
  • Referenzen
  • Partner

Kontakt

ScriptRunner Software GmbH
Ludwig-Erhard-Straße 2
76275 Ettlingen
Deutschland

T: +49 7243 20715-0
M: info(at)scriptrunner.com

Demo vereinbaren
© ScriptRunner Software GmbH is a subsidiary of AppSphere AG
  • LinkedIn
  • Xing
  • Twitter
  • Facebook
  • Youtube
  • Impressum
  • Datenschutz
  • Newsletter
Nach oben scrollen