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, 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