about_Parameters_Default_Values
Kurze Beschreibung
Beschreibt, wie benutzerdefinierte Standardwerte für Cmdlet-Parameter und erweiterte Funktionen festgelegt werden.
Lange Beschreibung
Mit der $PSDefaultParameterValues
Einstellungsvariable können Sie benutzerdefinierte Standardwerte für ein beliebiges Cmdlet oder eine 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 Standardstandardwerte nützlich, aber möglicherweise nicht für alle Umgebungen geeignet.
Dieses Feature 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. einen E-Mail-Servernamen oder eine Projekt-GUID.
Wenn der gewünschte Standardwert vorhersehbar 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 befindet sich im Format CmdletName:ParameterName
. Ein Wert ist der Dem Schlüssel zugewiesene DefaultValue oder ScriptBlock .
Die Syntax der $PSDefaultParameterValues
Einstellungsvariable lautet wie folgt:
$PSDefaultParameterValues=@{"CmdletName:ParameterName"="DefaultValue"}
$PSDefaultParameterValues=@{ "CmdletName:ParameterName"={{ScriptBlock}} }
$PSDefaultParameterValues["Disabled"]=$True | $False
In den Werten "CmdletName" und "ParameterName" sind "Wild Karte Zeichen zulässig.
Verwenden Sie zum Festlegen, Ändern, Hinzufügen oder Entfernen eines bestimmten Schlüssel-Wert-Paars$PSDefaultParameterValues
die Methoden zum Bearbeiten einer Standardhashtabelle. Beispielsweise die Methoden "Hinzufügen " und "Entfernen" . Diese Methoden überschreiben keine anderen Werte in der Hashtabelle.
Es gibt eine weitere Syntax, die keine vorhandene $PSDefaultParameterValues
Hashtabelle überschreibt. Verwenden Sie die folgende Syntax, um ein bestimmtes Schlüssel/Wert-Paar hinzuzufügen oder zu ändern:
$PSDefaultParameterValues["CmdletName:ParameterName"]="DefaultValue"
Der 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.
Der Standardwert 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 Skriptblockwert in eine zweite Gruppe von geschweiften 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, sodass sie nur in der Sitzung vorhanden ist, in der sie festgelegt ist. Er hat keinen Standardwert.
Geben Sie zum Festlegen $PSDefaultParameterValues
den 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 Ü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 $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 einen benutzerdefinierten Standardwert von Server123 fest.
$PSDefaultParameterValues = @{
"Send-MailMessage:SmtpServer"="Server123"
}
Festlegen von Standardwerten für mehrere Parameter
Wenn Sie Standardwerte für mehrere Parameter festlegen möchten, trennen Sie jedes Schlüssel-Wert-Paar durch ein Semikolon (;
). Die Schlüssel und Get-WinEvent:LogName
die Send-MailMessage:SmtpServer
Tasten werden auf benutzerdefinierte Standardwerte festgelegt.
$PSDefaultParameterValues = @{
"Send-MailMessage:SmtpServer"="Server123";
"Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational"
}
Verwenden von Wild Karte s und Switchparametern
Die Cmdlet- und Parameternamen können wild Karte Zeichen enthalten. Verwenden Und $False
festlegen Sie $True
Werte für Switchparameter, z. B. "Verbose". Der verbose-Parameter des allgemeinen Parameters ist für alle Befehle festgelegt$True
.
$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 Invoke-Command:ComputerName
Schlüssels wird auf einen Arraywert von 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 Parameter auf einen Standardwert von True fest. Die If
Anweisung enthält eine Bedingung, dass es $host.Name
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 eine zusätzliche Gruppe von geschweiften Klammern ein. Wenn PowerShell den äußeren Skriptblock auswertet, ist das Ergebnis der innere Skriptblock und wird als Standardwert festgelegt.
Der Invoke-Command:ScriptBlock
Schlüssel wird auf einen Standardwert des Systemereignisprotokolls festgelegt, 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 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, die beschreiben, 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"]
Um beispielsweise den Wert für den Send-MailMessage:SmtpServer
Schlüssel abzurufen.
PS> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]
Server123
Hinzufügen von Werten zu $PSDefaultParameterValues
Verwenden Sie die Add-Methode, um einen Wert hinzuzufügen$PSDefaultParameterValues
. 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 die Verwendung der Add-Methode für $PSDefaultParameterValues
.
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 dasselbe Ergebnis erreicht.
$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
Verwenden Sie zum Entfernen eines Werts $PSDefaultParameterValues
die Remove-Methode von Hashtabellen. Das Entfernen eines Werts wirkt sich nicht auf die vorhandenen Werte der Hashtabelle aus.
Die folgende Syntax zeigt die Verwendung der Remove-Methode für $PSDefaultParameterValues
.
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 zu $PSDefaultParameterValues
ä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
So deaktivieren und aktivieren Sie $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 für Parameter benötigen.
Fügen Sie zum Deaktivieren $PSDefaultParameterValues
einen Schlüssel mit Disabled
dem Wert "True" hinzu. Die Werte bleiben $PSDefaultParameterValues
erhalten, sind aber nicht effektiv.
PS> $PSDefaultParameterValues.Add("Disabled", $True)
Mit der folgenden Syntax wird dasselbe Ergebnis erreicht.
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
Zum erneuten Aktivieren $PSDefaultParameterValues
entfernen Sie den Deaktivierten Schlüssel, oder ändern Sie den Wert des Deaktivierten Schlüssels in $False
. Der vorherige Wert ist $PSDefaultParameterValues
erneut wirksam.
PS> $PSDefaultParameterValues.Remove("Disabled")
Mit der folgenden Syntax wird dasselbe Ergebnis erreicht.
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 $PSDefaultParameterValues
verwendet 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