Freigeben über


Informationen zu Standardwerten für Parameter

Kurze Beschreibung

Beschreibt, wie benutzerdefinierte Standardwerte für Cmdletparameter und erweiterte Funktionen festgelegt werden.

Lange Beschreibung

Mit $PSDefaultParameterValues der Einstellungsvariable können Sie benutzerdefinierte Standardwerte für alle Cmdlets oder erweiterten Funktionen 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 Standardwerte für ihre Parameter fest. In der Regel sind die Standardwerte nützlich, aber möglicherweise nicht für alle Umgebungen geeignet.

Dieses Feature ist besonders nützlich, wenn Sie fast bei jeder Verwendung des Befehls denselben alternativen Parameterwert angeben müssen oder wenn ein bestimmter Parameterwert schwer zu merken ist, z. B. einen E-Mail-Servernamen oder eine Projekt-GUID.

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

$PSDefaultParameterValues wurde in PowerShell 3.0 eingeführt.

Syntax

Die $PSDefaultParameterValues Variable ist eine Hashtabelle, die das Format von Schlüsseln als Objekttyp von System.Management.Automation.DefaultParameterDictionary überprüft. Die Hashtabelle enthält Schlüssel-Wert-Paare . Ein Schlüssel hat das Format CmdletName:ParameterName. Ein Value ist der Dem Schlüssel zugewiesene DefaultValue oder ScriptBlock .

Die Syntax der Einstellungsvariablen $PSDefaultParameterValues lautet wie folgt:

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

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

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

In den Werten CmdletName und ParameterName sind Feldhalterzeichen zulässig.

Um ein bestimmtes Schlüssel-Wert-Paar festzulegen, zu ändern, hinzuzufügen oder daraus $PSDefaultParameterValueszu entfernen, verwenden Sie die Methoden, um eine Standardhashtabelle zu bearbeiten. Beispiel: die Add- und Remove-Methoden . 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 keine $PSDefaultParameterValues Standardwerte für Skripts oder einfache Funktionen angeben.

DefaultValue kann ein Objekt oder ein Skriptblock sein. Wenn der Wert ein Skriptblock ist, wertet PowerShell den Skriptblock aus und verwendet das Ergebnis als Parameterwert. Wenn der angegebene Parameter einen Skriptblockwert akzeptiert, schließen Sie den Wert des Skriptblocks in einen zweiten Satz von Klammern ein, z. B.:

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

Weitere Informationen finden Sie in den folgenden Dokumenten:

Beispiele

Festlegen von $PSDefaultParameterValues

$PSDefaultParameterValues ist eine Einstellungsvariable, daher ist sie nur in der Sitzung vorhanden, in der sie festgelegt ist. Er besitzt keinen Standardwert.

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

Beispiele zum Ändern von Schlüssel-Wert-Paaren ohne Überschreiben vorhandener Hashtabellenwerte 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 Befehl hinzu $PSDefaultParameterValues . Weitere Informationen finden Sie unter about_Profiles.

Festlegen eines benutzerdefinierten Standardwerts

Das Schlüssel/Wert-Paar legt den Send-MailMessage:SmtpServer Schlüssel auf einen benutzerdefinierten Standardwert von 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 Wildcards und Umschaltparametern

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

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

Verwenden eines Arrays für den Standardwert

Wenn ein Parameter mehrere Werte akzeptieren kann, 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 unter unterschiedlichen Bedingungen unterschiedliche Standardwerte für einen Parameter anzugeben. PowerShell wertet den Skriptblock aus und verwendet das Ergebnis als Standardparameterwert.

Der Format-Table:AutoSize Schlüssel legt fest, dass der Parameter auf den Standardwert True umgestellt wird. Die If -Anweisung enthält eine Bedingung, bei der $host.Name es sich 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 Klammern ein. Wenn PowerShell den äußeren Skriptblock auswertet, ist das Ergebnis der innere Skriptblock, der als Standardwert festgelegt ist.

Der Invoke-Command:ScriptBlock Schlüssel wird auf einen Standardwert des Systemereignisprotokolls festgelegt, da der Skriptblock in einen zweiten Satz von 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 Hashtabellenwerte werden angezeigt, indem Sie an der PowerShell-Eingabeaufforderung eingeben $PSDefaultParameterValues .

Eine $PSDefaultParameterValues Hashtabelle wird mit drei Schlüssel-Wert-Paaren festgelegt. Diese Hashtabelle wird in den folgenden Beispielen verwendet, in denen beschrieben wird, wie Werte hinzugefügt, geändert und entfernt werden $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"]

Beispielsweise, 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 zu $PSDefaultParameterValueshinzuzufügen, 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")

Die folgende Syntax erreicht das gleiche Ergebnis.

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

Die $PSDefaultParameterValues Variable zeigt die aktualisierte Hashtabelle 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

Entfernen von Werten 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 Hashtabelle 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 Hashtabelle 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

Ändern von Werten 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 einen neuen Wert von ServerXYZ geändert.

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

Die $PSDefaultParameterValues Variable zeigt die aktualisierte Hashtabelle 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

Deaktivieren und Erneutes Aktivieren von $PSDefaultParameterValues

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

Um zu deaktivieren $PSDefaultParameterValues, fügen Sie einen Schlüssel von Disabled mit dem Wert True hinzu. Die Werte in $PSDefaultParameterValues werden beibehalten, sind aber nicht effektiv.

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

Die folgende Syntax erreicht das gleiche Ergebnis.

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

Die $PSDefaultParameterValues Variable zeigt die aktualisierte Hashtabelle 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 erneut zu aktivieren $PSDefaultParameterValues, entfernen Sie den deaktivierten Schlüssel, oder ändern Sie den Wert des deaktivierten Schlüssels in $False. Der vorherige Wert von $PSDefaultParameterValues ist wieder wirksam.

PS> $PSDefaultParameterValues.Remove("Disabled")

Die folgende Syntax erreicht das gleiche Ergebnis.

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

Die $PSDefaultParameterValues Variable zeigt die aktualisierte Hashtabelle an. Wenn die Remove-Methode verwendet wird, wird der Disabled Schlüssel aus der Ausgabe entfernt. Wenn die alternative Syntax zum erneuten Aktivieren $PSDefaultParameterValuesverwendet wurde, 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

Weitere Informationen

about_CommonParameters

about_Functions_Advanced

about_Functions_CmdletBindingAttribute

about_Hash_Tables

about_Preference_Variables

about_Profiles

about_Script_Blocks