Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Krátký popis
Popisuje, jak nastavit vlastní výchozí hodnoty pro parametry rutin, pokročilé funkce a skripty.
Dlouhý popis
Proměnná předvoleb $PSDefaultParameterValues umožňuje zadat vlastní výchozí hodnoty parametrů pro libovolný cmdlet, pokročilou funkci nebo skript, který používá CmdletBinding atribut. Definované hodnoty se použijí, pokud na příkazovém řádku nezadáte jiné hodnoty.
Tato funkce je užitečná v následujících scénářích:
- zadání stejné hodnoty parametru při každém použití příkazu
- zadání konkrétní hodnoty parametru, která se obtížně pamatuje, například název e-mailového serveru nebo identifikátor GUID projektu
Proměnná $PSDefaultParameterValues nemá výchozí hodnotu. Pokud chcete uložit nastavení pro použití v budoucích relacích, přidejte přiřazení proměnné do profilu PowerShellu.
$PSDefaultParameterValues byl představen v PowerShellu 3.0.
Syntaxe
Proměnná $PSDefaultParameterValues je typ objektu System.Management.Automation.DefaultParameterDictionary. Typ DefaultParameterDictionary je hašovací tabulka s dalším ověřením formátu klíčů. Hashtable obsahuje páry klíč-hodnota, kde:
- klíč má formát
CommandName:ParameterName - hodnota je výchozí hodnota parametru nebo ScriptBlock, která vrátí výchozí hodnotu.
U klíče musí být CommandName název rutiny, rozšířené funkce nebo souboru skriptu, který používá atribut CmdletBinding. Název skriptu se musí shodovat s názvem hlášeným (Get-Command -Name .\script.ps1).Name.
Poznámka
PowerShell nezabrání zadat alias pro CommandName. Existují však případy, kdy je definice ignorována nebo způsobuje chybu. Měli byste se vyhnout definování výchozích hodnot pro aliasy příkazů.
Hodnota může být buď objektem typu, který je kompatibilní s parametrem, nebo ScriptBlockem, který takovou hodnotu vrátí. Pokud je hodnota blok skriptu, PowerShell vyhodnotí blok skriptu a použije výsledek pro hodnotu parametru. Pokud zadaný parametr očekává typ ScriptBlock, musíte hodnotu uzavřít do jiné sady složených závorek. Když PowerShell vyhodnotí vnější ScriptBlock, výsledkem je vnitřní ScriptBlock. Vnitřní ScriptBlock se stane novou výchozí hodnotou parametru.
Například:
$PSDefaultParameterValues = @{
'Invoke-Command:ScriptBlock' = { {Get-Process} }
}
Examples
Pomocí metod Add() a Remove() přidejte nebo odeberte konkrétní dvojici klíč-hodnota z $PSDefaultParameterValues bez přepsání dalších existujících párů klíč-hodnota.
$PSDefaultParameterValues.Add('CmdletName:ParameterName', 'DefaultValue')
$PSDefaultParameterValues.Remove('CmdletName:ParameterName')
Pomocí indexování nebo přístupu člena můžete změnit hodnotu existující dvojice klíč-hodnota. Například:
$PSDefaultParameterValues.'CommandName:ParameterName'='DefaultValue2'
$PSDefaultParameterValues['CommandName:ParameterName']='DefaultValue1'
Přiřaďte hodnoty k $PSDefaultParameterValues
Pokud chcete definovat výchozí hodnoty parametrů cmdletu, přiřaďte hashtable obsahující příslušné páry klíč-hodnota k proměnné $PSDefaultParameterValues.
Hashtable může obsahovat několik párů klíč-hodnota. Tento příklad nastaví výchozí hodnoty pro klíče Send-MailMessage:SmtpServer a Get-WinEvent:LogName.
$PSDefaultParameterValues = @{
'Send-MailMessage:SmtpServer'='Server123'
'Get-WinEvent:LogName'='Microsoft-Windows-PrintService/Operational'
}
Názvy rutin a parametrů můžou obsahovat zástupné znaky. Použijte $true a $false nastavte hodnoty pro parametry přepínače, například Podrobné. Tento příklad nastaví společný parametr Verbose na $true pro všechny příkazy.
$PSDefaultParameterValues = @{'*:Verbose'=$true}
Pokud parametr přijímá více hodnot, můžete zadat více výchozích hodnot pomocí pole. Tento příklad nastaví výchozí hodnotu klíče Invoke-Command:ComputerName na pole obsahující řetězcové hodnoty Server01 a Server02.
$PSDefaultParameterValues = @{
'Invoke-Command:ComputerName' = 'Server01', 'Server02'
}
Zobrazení definovaných hodnot
Zvažte následující definici $PSDefaultParameterValues:
$PSDefaultParameterValues = @{
'Send-MailMessage:SmtpServer' = 'Server123'
'Get-WinEvent:LogName' = 'Microsoft-Windows-PrintService/Operational'
'Get-*:Verbose' = $true
}
Definované hodnoty můžete zobrazit zadáním $PSDefaultParameterValues na příkazovém řádku.
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
K získání konkrétní hodnoty můžete použít přístup přes index nebo členskou notaci.
PS> $PSDefaultParameterValues['Send-MailMessage:SmtpServer'] # index notation
Server123
PS> $PSDefaultParameterValues.'Get-*:Verbose' # member access notation
True
Použijte blok skriptu pro výchozí hodnotu
Blok skriptu můžete použít k určení různých výchozích hodnot parametru za různých podmínek. PowerShell vyhodnotí blok skriptu a použije výsledek jako výchozí hodnotu parametru.
Klíč Format-Table:AutoSize nastaví parametr přepínání na výchozí hodnotu $true. Příkaz if obsahuje podmínku, podle které musí být $Host.NameConsoleHost.
$PSDefaultParameterValues = @{
'Format-Table:AutoSize' = { if ($Host.Name -eq 'ConsoleHost'){$true} }
}
Pokud parametr přijme hodnotu ScriptBlock, uzavřete ScriptBlock do jiné sady složených závorek. Když PowerShell vyhodnotí vnější ScriptBlock, výsledkem je vnitřní ScriptBlock. Vnitřní ScriptBlock se stane novou výchozí hodnotou parametru.
$PSDefaultParameterValues = @{
'Invoke-Command:ScriptBlock' = { {Get-EventLog -Log System} }
}
Přidání hodnot do existující proměnné $PSDefaultParameterValues
Pokud chcete přidat hodnotu do $PSDefaultParameterValues, použijte metodu Add(). Přidání hodnoty nemá vliv na existující hodnoty hashovací tabulky. K oddělení klíče
$PSDefaultParameterValues.Add('Get-Process:Name', 'PowerShell')
Hashtable vytvořená v předchozím příkladu se aktualizuje pomocí nového páru klíč-hodnota.
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-Process:Name PowerShell
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Odebrání hodnoty z $PSDefaultParameterValues
Pokud chcete odebrat hodnotu z $PSDefaultParameterValues, použijte metodu Remove().
Odebrání hodnoty nemá vliv na existující hodnoty hashovací tabulky.
Tento příklad odebere dvojici klíč-hodnota přidanou v předchozím příkladu.
PS> $PSDefaultParameterValues.Remove('Get-Process:Name')
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Změna hodnoty v $PSDefaultParameterValues
Pomocí indexování nebo přístupu člena můžete změnit výchozí hodnotu existující dvojice klíč-hodnota. V tomto příkladu se výchozí hodnota klíče Send-MailMessage:SmtpServer změní na novou hodnotu ServerXYZ.
PS> $PSDefaultParameterValues['Send-MailMessage:SmtpServer']='ServerXYZ'
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer ServerXYZ
Vypněte nebo znovu povolte $PSDefaultParameterValues
Můžete dočasně zakázat a pak znovu povolit $PSDefaultParameterValues.
Zakázání $PSDefaultParameterValues je užitečné, pokud spouštíte skripty, které potřebují jiné výchozí hodnoty parametrů.
Chcete-li zakázat $PSDefaultParameterValues, přidejte klíč Disabled s hodnotou $true. Hodnoty v $PSDefaultParameterValues se zachovají, ale nepoužívají se.
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
Chcete-li znovu povolit $PSDefaultParameterValues, odeberte klíč Disabled nebo změňte hodnotu klíče Disabled na $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