Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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