about_Parameters_Default_Values

Kurzbeschreibung

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

Lange Beschreibung

Mit der $PSDefaultParameterValues Einstellungsvariablen können Sie benutzerdefinierte Standardwerte für jedes Cmdlet oder jede erweiterte Funktion angeben. Cmdlets und erweiterte Funktionen verwenden den benutzerdefinierten Standardwert, es sei denn, Sie geben einen anderen Wert im Befehl an.

Die Autoren von Cmdlets und erweiterten Funktionen legen Standardstandardwerte für ihre Parameter fest. In der Regel sind die Standardwerte nützlich, aber sie sind möglicherweise nicht für alle Umgebungen geeignet.

Diese Funktion ist besonders nützlich, wenn Sie fast jedes Mal, wenn Sie den Befehl verwenden, denselben alternativen Parameterwert angeben müssen oder wenn ein bestimmter Parameterwert schwer zu merken ist, z. B. der Name eines E-Mail-Servers oder die Projekt-GUID.

Wenn der gewünschte Standardwert vorhersehbar variiert, können Sie einen Skriptblock angeben, der unter verschiedenen Bedingungen unterschiedliche Standardwerte für einen Parameter bereitstellt.

$PSDefaultParameterValues wurde in PowerShell 3.0 eingeführt.

Syntax

Bei der $PSDefaultParameterValues Variablen handelt es sich um eine Hashtabelle, die das Format von Schlüsseln als Objekttyp von System.Management.Automation.DefaultParameterDictionary überprüft. Die Hash-Tabelle enthält Schlüssel-Wert-Paare . Ein Schlüssel hat das Format CmdletName:ParameterName. Ein Wert ist der DefaultValue oder ScriptBlock , der dem Schlüssel zugewiesen ist.

Die Syntax der $PSDefaultParameterValues Einstellungsvariablen lautet wie folgt:

$PSDefaultParameterValues=@{"CmdletName:ParameterName"="DefaultValue"}

$PSDefaultParameterValues=@{ "CmdletName:ParameterName"={{ScriptBlock}} }

$PSDefaultParameterValues["Disabled"]=$True | $False

Platzhalterzeichen sind in den Werten CmdletName und ParameterName zulässig.

Um ein bestimmtes Schlüssel-Wert-Paar festzulegen, zu ändern, hinzuzufügen oder zu $PSDefaultParameterValuesentfernen, verwenden Sie die Methoden, um eine Standard-Hash-Tabelle zu bearbeiten. Beispiel : die Add-Methode und die Remove-Methode . Diese Methoden überschreiben keine anderen Werte in der Hashtabelle.

Es gibt eine andere Syntax, die eine vorhandene $PSDefaultParameterValues Hashtabelle nicht überschreibt. Verwenden Sie die folgende Syntax, um ein bestimmtes Schlüssel-Wert-Paar hinzuzufügen oder zu ändern:

$PSDefaultParameterValues["CmdletName:ParameterName"]="DefaultValue"

CmdletName muss der Name eines Cmdlets oder der Name einer erweiterten Funktion sein, die das CmdletBinding-Attribut verwendet. Sie können diese nicht $PSDefaultParameterValues verwenden, um Standardwerte für Skripts oder einfache Funktionen anzugeben.

Der DefaultValue kann ein Objekt oder ein Skriptblock sein. Wenn es sich bei dem Wert um einen Skriptblock handelt, wertet PowerShell den Skriptblock aus und verwendet das Ergebnis als Parameterwert. Wenn der angegebene Parameter einen Skriptblockwert akzeptiert, schließen Sie den Skriptblockwert in einen zweiten Satz geschweifter Klammern ein, z. B.:

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

Weitere Informationen finden Sie in den folgenden Dokumenten:

Beispiele

So stellen Sie $PSDefaultParameterValues ein

$PSDefaultParameterValues ist eine Einstellungsvariable und existiert daher nur in der Sitzung, in der sie festgelegt ist. Er hat keinen Standardwert.

Geben Sie zum Festlegen $PSDefaultParameterValuesden Variablennamen und ein oder mehrere Schlüssel-Wert-Paare ein. Wenn Sie einen anderen $PSDefaultParameterValues Befehl ausführen, wird die vorhandene Hashtabelle überschrieben.

Beispiele zum Ändern von Schlüssel-Wert-Paaren , ohne vorhandene Hashtabellenwerte zu überschreiben, finden Sie unter Hinzufügen von Werten zu $PSDefaultParameterValues oder Ändern von Werten in $PSDefaultParameterValues.

Um für zukünftige Sitzungen zu speichern $PSDefaultParameterValues , fügen Sie Ihrem PowerShell-Profil einen $PSDefaultParameterValues Befehl hinzu. Weitere Informationen finden Sie unter about_Profiles.

Festlegen eines benutzerdefinierten Standardwerts

Das Schlüssel-Wert-Paar legt den Send-MailMessage:SmtpServer Schlüssel auf den benutzerdefinierten Standardwert Server123 fest.

$PSDefaultParameterValues = @{
  "Send-MailMessage:SmtpServer"="Server123"
}

Festlegen von Standardwerten für mehrere Parameter

Um Standardwerte für mehrere Parameter festzulegen, trennen Sie jedes Schlüssel/Wert-Paar durch ein Semikolon (;). Die Send-MailMessage:SmtpServer Schlüssel und Get-WinEvent:LogName sind auf benutzerdefinierte Standardwerte festgelegt.

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

Verwenden von Platzhaltern und Wechseln von Parametern

Die Cmdlet- und Parameternamen können Wildcardzeichen enthalten. Verwenden Sie $True und $False, um Werte für Schalterparameter festzulegen, z. B. verbose. Der Parameter Verbose des Parameters common ist für alle Befehle auf $True festgelegt.

$PSDefaultParameterValues = @{"*:Verbose"=$True}

Verwenden Sie ein Array für den Standardwert

Wenn ein Parameter mehrere Werte akzeptieren kann, ein Array, können Sie mehrere Werte als Standardwerte festlegen. Der Standardwert des Schlüssels Invoke-Command:ComputerName ist auf den Arraywert Server01 und Server02 festgelegt.

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

Verwenden eines Skriptblocks

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

Der Format-Table:AutoSize Schlüssel legt diesen switch-Parameter auf den Standardwert True fest. Die If Anweisung enthält die Bedingung, dass es sich $host.Name um die PowerShell-Konsole ConsoleHost handeln muss.

$PSDefaultParameterValues=@{
  "Format-Table:AutoSize"={if ($host.Name -eq "ConsoleHost"){$True}}
}

Wenn ein Parameter einen Skriptblockwert akzeptiert, schließen Sie den Skriptblock in einen zusätzlichen Satz geschweifter Klammern ein. Wenn PowerShell den äußeren Skriptblock auswertet, ist das Ergebnis der innere Skriptblock, der als Standardparameterwert festgelegt wird.

Der Invoke-Command:ScriptBlock Schlüssel, der auf einen Standardwert des Systemereignisprotokolls festgelegt ist, da der Skriptblock in eine zweite Gruppe von geschweiften Klammern eingeschlossen ist. Das Ergebnis des Skriptblocks wird an das Invoke-Command Cmdlet übergeben.

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

So erhalten Sie $PSDefaultParameterValues

Die Werte der Hashtabelle werden durch Eingabe $PSDefaultParameterValues an der PowerShell-Eingabeaufforderung angezeigt.

Eine $PSDefaultParameterValues Hash-Tabelle wird mit drei Schlüssel-Wert-Paaren festgelegt. Diese Hashtabelle wird in den folgenden Beispielen verwendet, in denen beschrieben wird, wie Werte von $PSDefaultParameterValues.

PS> $PSDefaultParameterValues = @{
  "Send-MailMessage:SmtpServer"="Server123"
  "Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational"
  "Get-*:Verbose"=$True
}

PS> $PSDefaultParameterValues

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

Verwenden Sie die folgende Syntax, um den Wert eines bestimmten CmdletName:ParameterName Schlüssels abzurufen:

$PSDefaultParameterValues["CmdletName:ParameterName"]

Zum Beispiel, um den Wert für den Send-MailMessage:SmtpServer Schlüssel abzurufen.

PS> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]
Server123

Hinzufügen von Werten zu $PSDefaultParameterValues

Um einen Wert hinzuzufügen $PSDefaultParameterValues, verwenden Sie die 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 Wert zu trennen. Die folgende Syntax zeigt, wie die Add-Methode für $PSDefaultParameterValuesverwendet wird.

PS> $PSDefaultParameterValues.Add("CmdletName:ParameterName", "DefaultValue")

Die im vorherigen Beispiel erstellte Hashtabelle wird mit einem neuen Schlüssel-Wert-Paar aktualisiert. Die Add-Methode legt den Get-Process:Name Schlüssel auf den Wert PowerShell fest.

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

Mit der folgenden Syntax wird das gleiche Ergebnis erzielt.

$PSDefaultParameterValues["Get-Process:Name"]="PowerShell"

Die $PSDefaultParameterValues Variable zeigt die aktualisierte Hash-Tabelle an. Der Get-Process:Name Schlüssel wurde hinzugefügt.

PS> $PSDefaultParameterValues

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

So entfernen Sie Werte aus $PSDefaultParameterValues

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

Die folgende Syntax zeigt, wie die Remove-Methode für $PSDefaultParameterValuesverwendet wird.

PS> $PSDefaultParameterValues.Remove("CmdletName:ParameterName")

In diesem Beispiel wird die im vorherigen Beispiel erstellte Hash-Tabelle aktualisiert, um ein Schlüssel-Wert-Paar zu entfernen. Die Remove-Methode entfernt den Get-Process:Name Schlüssel.

$PSDefaultParameterValues.Remove("Get-Process:Name")

Die $PSDefaultParameterValues Variable zeigt die aktualisierte Hash-Tabelle an. Der Get-Process:Name Schlüssel wurde entfernt.

PS> $PSDefaultParameterValues

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

So ändern Sie Werte in $PSDefaultParameterValues

Änderungen an einem bestimmten Wert wirken sich nicht auf vorhandene Hashtabellenwerte aus. Verwenden Sie die folgende Syntax, um ein bestimmtes Schlüssel-Wert-Paar in $PSDefaultParameterValueszu ändern:

PS> $PSDefaultParameterValues["CmdletName:ParameterName"]="DefaultValue"

In diesem Beispiel wird die im vorherigen Beispiel erstellte Hashtabelle aktualisiert, um ein Schlüssel-Wert-Paar zu ändern. Mit dem folgenden Befehl wird der Send-MailMessage:SmtpServer Schlüssel in den neuen Wert ServerXYZ geändert.

$PSDefaultParameterValues["Send-MailMessage:SmtpServer"]="ServerXYZ"

Die $PSDefaultParameterValues Variable zeigt die aktualisierte Hash-Tabelle an. Der Send-MailMessage:SmtpServer Schlüssel wurde in einen neuen Wert geändert.

PS> $PSDefaultParameterValues

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

So deaktivieren und aktivieren Sie $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.

Fügen Sie zum Deaktivieren $PSDefaultParameterValueseinen Schlüssel von Disabled mit dem Wert True hinzu. Die Werte in $PSDefaultParameterValues werden beibehalten, sind aber nicht wirksam.

PS> $PSDefaultParameterValues.Add("Disabled", $True)

Mit der folgenden Syntax wird das gleiche Ergebnis erzielt.

PS> $PSDefaultParameterValues["Disabled"]=$True

Die $PSDefaultParameterValues Variable zeigt die aktualisierte Hash-Tabelle mit dem Wert für den Disabled Schlüssel an.

PS> $PSDefaultParameterValues

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

Um die Aktivierung wieder zu aktivieren $PSDefaultParameterValues, entfernen Sie den Schlüssel Disabled , oder ändern Sie den Wert des Schlüssels Disabled in $False. Der vorherige Wert von $PSDefaultParameterValues ist wieder wirksam.

PS> $PSDefaultParameterValues.Remove("Disabled")

Mit der folgenden Syntax wird das gleiche Ergebnis erzielt.

PS> $PSDefaultParameterValues["Disabled"]=$False

Die $PSDefaultParameterValues Variable zeigt die aktualisierte Hash-Tabelle an. Wenn die Remove-Methode verwendet wird, wird der Disabled Schlüssel aus der Ausgabe entfernt. Wenn die alternative Syntax verwendet wurde, um erneut zu aktivieren $PSDefaultParameterValues, wird der Disabled Schlüssel als False angezeigt.

PS> $PSDefaultParameterValues

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

Siehe auch