Freigeben über


about_Parameters_Default_Values

Kurzbeschreibung

Beschreibt, wie benutzerdefinierte Standardwerte für Cmdlet-Parameter, erweiterte Funktionen und Skripts festgelegt werden.

Lange Beschreibung

Mit der einstellungsvariablen $PSDefaultParameterValues können Sie benutzerdefinierte Standardparameterwerte für jedes Cmdlet, eine erweiterte Funktion oder ein Skript angeben, das das attribut CmdletBinding verwendet. Die definierten Werte werden verwendet, es sei denn, Sie geben andere Werte in der Befehlszeile an.

Dieses Feature ist in den folgenden Szenarien nützlich:

  • Angeben desselben Parameterwerts bei jeder Verwendung des Befehls
  • Angeben eines bestimmten Parameterwerts, der schwer zu merken ist, z. B. einen E-Mail-Servernamen oder eine Projekt-GUID

Die variable $PSDefaultParameterValues hat keinen Standardwert. Um die Einstellungen für die Verwendung in zukünftigen Sitzungen zu speichern, fügen Sie die variable Zuweisung zu Ihrem PowerShell-Profil hinzu.

$PSDefaultParameterValues wurde in PowerShell 3.0 eingeführt.

Syntax

Die $PSDefaultParameterValues Variable ist ein Objekttyp System.Management.Automation.DefaultParameterDictionary. Der DefaultParameterDictionary Typs ist eine Hashtabelle mit einer zusätzlichen Überprüfung für das Format der Schlüssel. Die Hashtabelle enthält Schlüssel-Wert-Paare, wobei:

  • die Taste das Format CommandName:ParameterName
  • der Wert ist der Standardwert für den Parameter oder eine ScriptBlock-, die den Standardwert zurückgibt.

Für den Schlüsselmuss die CommandName- der Name eines Cmdlets, einer erweiterten Funktion oder einer Skriptdatei sein, die das attribut CmdletBinding verwendet. Der Skriptname muss dem Von (Get-Command -Name .\script.ps1).Namegemeldeten Namen entsprechen.

Anmerkung

PowerShell verhindert nicht, dass Sie einen Alias für die CommandName-angeben. Es gibt jedoch Fälle, in denen die Definition ignoriert wird oder einen Fehler verursacht. Sie sollten keine Standardwerte für Befehlsalias definieren.

Der Wert kann ein Objekt eines Typs sein, der mit dem Parameter kompatibel ist, oder ein ScriptBlock-, das einen solchen Wert zurückgibt. Wenn der Wert ein Scriptblock ist, wertet PowerShell den Scriptblock aus und verwendet das Ergebnis für den Parameterwert. Wenn der angegebene Parameter eine ScriptBlock- Typ erwartet, müssen Sie den Wert in eine andere Gruppe von geschweiften Klammern einschließen. Wenn PowerShell die äußere ScriptBlock-auswertet, ist das Ergebnis das innere ScriptBlock-. Das innere ScriptBlock- wird zum neuen Standardwert.

Zum Beispiel:

$PSDefaultParameterValues = @{
    'Invoke-Command:ScriptBlock' = { {Get-Process} }
}

Examples

Verwenden Sie die methoden Add() und Remove(), um ein bestimmtes Schlüssel-Wert-Paar aus $PSDefaultParameterValues hinzuzufügen oder zu entfernen, ohne andere vorhandene Schlüsselwertpaare zu überschreiben.

$PSDefaultParameterValues.Add('CmdletName:ParameterName', 'DefaultValue')
$PSDefaultParameterValues.Remove('CmdletName:ParameterName')

Verwenden Sie den Indizierungs- oder Memberzugriff, um den Wert eines vorhandenen Schlüsselwertpaars zu ändern. Zum Beispiel:

$PSDefaultParameterValues.'CommandName:ParameterName'='DefaultValue2'
$PSDefaultParameterValues['CommandName:ParameterName']='DefaultValue1'

Zuweisen von Werten zu $PSDefaultParameterValues

Um Standardwerte für Cmdlet-Parameter zu definieren, weisen Sie der variablen $PSDefaultParameterValues eine Hashtable zu, die die entsprechenden Schlüsselwertpaare enthält. Die Hashtabelle kann mehrere Schlüsselwertpaare enthalten. In diesem Beispiel werden Standardwerte für die tasten Send-MailMessage:SmtpServer und Get-WinEvent:LogName festgelegt.

$PSDefaultParameterValues = @{
  'Send-MailMessage:SmtpServer'='Server123'
  'Get-WinEvent:LogName'='Microsoft-Windows-PrintService/Operational'
}

Die Cmdlet- und Parameternamen können Wildcardzeichen enthalten. Verwenden Sie $true und $false, um Werte für Schalterparameter festzulegen, z. B. verbose. In diesem Beispiel wird der allgemeine Parameter Verbose- für alle Befehle auf $true festgelegt.

$PSDefaultParameterValues = @{'*:Verbose'=$true}

Wenn ein Parameter mehrere Werte akzeptiert, können Sie mehrere Standardwerte mithilfe eines Arrays bereitstellen. In diesem Beispiel wird der Standardwert des Invoke-Command:ComputerName Schlüssels auf ein Array festgelegt, das die Zeichenfolgenwerte Server01 und Server02enthält.

$PSDefaultParameterValues = @{
  'Invoke-Command:ComputerName' = 'Server01', 'Server02'
}

Definierte Werte anzeigen

Betrachten Sie die folgende Definition von $PSDefaultParameterValues:

$PSDefaultParameterValues = @{
  'Send-MailMessage:SmtpServer' = 'Server123'
  'Get-WinEvent:LogName' = 'Microsoft-Windows-PrintService/Operational'
  'Get-*:Verbose' = $true
}

Sie können die definierten Werte anzeigen, indem Sie an der Eingabeaufforderung $PSDefaultParameterValues eingeben.

PS> $PSDefaultParameterValues

Name                           Value
----                           -----
Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
Get-*:Verbose                  True
Send-MailMessage:SmtpServer    Server123

Sie können den Indizierungs- oder Memberzugriff verwenden, um einen bestimmten Wert abzurufen.

PS> $PSDefaultParameterValues['Send-MailMessage:SmtpServer'] # index notation
Server123
PS> $PSDefaultParameterValues.'Get-*:Verbose' # member access notation
True

Verwenden eines Scriptblocks für den Standardwert

Sie können einen Scriptblock verwenden, um unterschiedliche Standardwerte für einen Parameter unter unterschiedlichen Bedingungen anzugeben. PowerShell wertet den Scriptblock aus und verwendet das Ergebnis als Standardwert.

Der Format-Table:AutoSize-Schlüssel legt fest, dass der Parameter auf einen Standardwert von $true Die if-Anweisung enthält eine Bedingung, dass die $Host.NameConsoleHostsein muss.

$PSDefaultParameterValues = @{
  'Format-Table:AutoSize' = { if ($Host.Name -eq 'ConsoleHost'){$true} }
}

Wenn ein Parameter einen ScriptBlock-wert akzeptiert, schließen Sie die ScriptBlock- in eine andere Gruppe von geschweiften Klammern ein. Wenn PowerShell die äußere ScriptBlock-auswertet, ist das Ergebnis das innere ScriptBlock-. Das innere ScriptBlock- wird zum neuen Standardwert.

$PSDefaultParameterValues = @{
  'Invoke-Command:ScriptBlock' = { {Get-EventLog -Log System} }
}

Hinzufügen von Werten zu einer vorhandenen $PSDefaultParameterValues Variablen

Verwenden Sie zum Hinzufügen eines Werts zu $PSDefaultParameterValuesdie Add()-Methode. Das Hinzufügen eines Werts wirkt sich nicht auf die vorhandenen Werte der Hashtabelle aus. Verwenden Sie ein Komma (,), um den Schlüssel vom Wertzu trennen.

$PSDefaultParameterValues.Add('Get-Process:Name', 'PowerShell')

Die im vorherigen Beispiel erstellte Hashtabelle wird mit einem neuen Schlüsselwertpaar aktualisiert.

PS> $PSDefaultParameterValues

Name                           Value
----                           -----
Get-Process:Name               PowerShell
Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
Get-*:Verbose                  True
Send-MailMessage:SmtpServer    Server123

Entfernen eines Werts aus $PSDefaultParameterValues

Um einen Wert aus $PSDefaultParameterValueszu entfernen, verwenden Sie die Remove()-Methode. Das Entfernen eines Werts wirkt sich nicht auf die vorhandenen Werte der Hashtabelle aus.

In diesem Beispiel wird das Schlüssel-Wert-Paar entfernt, das im vorherigen Beispiel hinzugefügt wurde.

PS> $PSDefaultParameterValues.Remove('Get-Process:Name')
PS> $PSDefaultParameterValues

Name                           Value
----                           -----
Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
Get-*:Verbose                  True
Send-MailMessage:SmtpServer    Server123

Ändern eines Werts in $PSDefaultParameterValues

Verwenden Sie die Indizierung oder den Memberzugriff, um den Standardwert eines vorhandenen Schlüsselwertpaars zu ändern. In diesem Beispiel wird der Standardwert für den schlüssel Send-MailMessage:SmtpServer in einen neuen Wert von ServerXYZgeändert.

PS> $PSDefaultParameterValues['Send-MailMessage:SmtpServer']='ServerXYZ'
PS> $PSDefaultParameterValues

Name                           Value
----                           -----
Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
Get-*:Verbose                  True
Send-MailMessage:SmtpServer    ServerXYZ

Deaktivieren oder erneutes Aktivieren von $PSDefaultParameterValues

Sie können $PSDefaultParameterValuesvorübergehend deaktivieren und dann erneut aktivieren. Das Deaktivieren von $PSDefaultParameterValues ist nützlich, wenn Sie Skripts ausführen, die unterschiedliche Standardwerte benötigen.

Um $PSDefaultParameterValueszu deaktivieren, fügen Sie einen Schlüssel Disabled mit dem Wert $truehinzu. Die Werte in $PSDefaultParameterValues bleiben erhalten, werden jedoch nicht verwendet.

PS> $PSDefaultParameterValues.Add('Disabled', $true)
PS> $PSDefaultParameterValues

Name                           Value
----                           -----
Disabled                       True
Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
Get-*:Verbose                  True
Send-MailMessage:SmtpServer    ServerXYZ

Um $PSDefaultParameterValueserneut zu aktivieren, entfernen Sie den Disabled Schlüssel, oder ändern Sie den Wert des Disabled-Schlüssels in $false.

PS> $PSDefaultParameterValues.Disabled = $false
PS> $PSDefaultParameterValues

Name                           Value
----                           -----
Disabled                       False
Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
Get-*:Verbose                  True
Send-MailMessage:SmtpServer    ServerXYZ

Siehe auch