about_Parameters_Default_Values
Breve descrição
Descreve como definir valores padrão personalizados para parâmetros de cmdlet, funções avançadas e scripts.
Descrição longa
A variável de preferência $PSDefaultParameterValues
permite especificar valores de parâmetro padrão personalizados para qualquer cmdlet, função avançada ou script que use o atributo CmdletBinding. Os valores definidos são usados, a menos que você especifique outros valores na linha de comando.
Esse recurso é útil nos seguintes cenários:
- especificando o mesmo valor de parâmetro sempre que você usar o comando
- especificando um valor de parâmetro específico que é difícil de lembrar, como um nome de servidor de e-mail ou GUID do projeto
A variável $PSDefaultParameterValues
não tem valor padrão. Para salvar as configurações para uso em sessões futuras, adicione a atribuição de variável ao seu perfil do PowerShell.
$PSDefaultParameterValues
foi introduzido no PowerShell 3.0.
Sintaxe
A variável $PSDefaultParameterValues
é um tipo de objeto de System.Management.Automation.DefaultParameterDictionary. O tipo DefaultParameterDictionary é uma hashtable com validação adicional para o formato das chaves. A hashtable contém pares chave-valor onde:
- A chave tem o formato
CommandName:ParameterName
- o valor é o valor padrão para o parâmetro ou um ScriptBlock que retorna o valor padrão
Para a chave , o CommandName deve ser o nome de um cmdlet, função avançada ou arquivo de script que usa o atributo CmdletBinding. O nome do script deve corresponder ao nome tal como relatado pelo (Get-Command -Name .\script.ps1).Name
.
Observação
O PowerShell não impede que você especifique um alias para o CommandName. No entanto, há casos em que a definição é ignorada ou causa um erro. Você deve evitar definir valores padrão para aliases de comando.
O valor
Por exemplo:
$PSDefaultParameterValues = @{
'Invoke-Command:ScriptBlock' = { {Get-Process} }
}
Exemplos
Use os métodos Add()
e Remove()
para adicionar ou remover um par chave-valor específico do $PSDefaultParameterValues
sem substituir outros pares chave-valor existentes.
$PSDefaultParameterValues.Add('CmdletName:ParameterName', 'DefaultValue')
$PSDefaultParameterValues.Remove('CmdletName:ParameterName')
Use a indexação ou o acesso de membro para alterar o valor de um par chave-valor existente. Por exemplo:
$PSDefaultParameterValues.'CommandName:ParameterName'='DefaultValue2'
$PSDefaultParameterValues['CommandName:ParameterName']='DefaultValue1'
Atribua valores a $PSDefaultParameterValues
Para definir valores padrão para parâmetros de cmdlet, atribua uma hashtable contendo os pares chave-valor apropriados à variável $PSDefaultParameterValues
.
A hashtable pode conter vários pares chave-valor. Este exemplo define valores padrão para as chaves Send-MailMessage:SmtpServer
e Get-WinEvent:LogName
.
$PSDefaultParameterValues = @{
'Send-MailMessage:SmtpServer'='Server123'
'Get-WinEvent:LogName'='Microsoft-Windows-PrintService/Operational'
}
Os nomes do cmdlet e dos parâmetros podem conter caracteres curinga. Use $true
e $false
defina valores para parâmetros de switch, como Verbose. Este exemplo define o parâmetro comum Verbose como $true
para todos os comandos.
$PSDefaultParameterValues = @{'*:Verbose'=$true}
Se um parâmetro aceitar vários valores, você poderá fornecer vários valores padrão usando uma matriz. Este exemplo define o valor padrão da chave Invoke-Command:ComputerName
como uma matriz que contém os valores de cadeia de caracteres Server01
e Server02
.
$PSDefaultParameterValues = @{
'Invoke-Command:ComputerName' = 'Server01', 'Server02'
}
Ver valores definidos
Considere a seguinte definição de $PSDefaultParameterValues
:
$PSDefaultParameterValues = @{
'Send-MailMessage:SmtpServer' = 'Server123'
'Get-WinEvent:LogName' = 'Microsoft-Windows-PrintService/Operational'
'Get-*:Verbose' = $true
}
Você pode exibir os valores definidos inserindo $PSDefaultParameterValues
no prompt de comando.
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Você pode usar a indexação ou o acesso de membro para obter um valor específico.
PS> $PSDefaultParameterValues['Send-MailMessage:SmtpServer'] # index notation
Server123
PS> $PSDefaultParameterValues.'Get-*:Verbose' # member access notation
True
Utilize um bloco de script para o valor padrão
Você pode usar um bloco de script para especificar valores padrão diferentes para um parâmetro em condições diferentes. O PowerShell avalia o bloco de script e usa o resultado como o valor do parâmetro padrão.
A chave Format-Table:AutoSize
define esse parâmetro switch para um valor padrão de $true
A instrução if
contém uma condição de que o $Host.Name
deve ser ConsoleHost
.
$PSDefaultParameterValues = @{
'Format-Table:AutoSize' = { if ($Host.Name -eq 'ConsoleHost'){$true} }
}
Se um parâmetro aceitar um valor de ScriptBlock, coloque o ScriptBlock em outro conjunto de chaves. Quando o PowerShell avalia oexterno
$PSDefaultParameterValues = @{
'Invoke-Command:ScriptBlock' = { {Get-EventLog -Log System} }
}
Adicionar valores a uma variável $PSDefaultParameterValues
existente
Para adicionar um valor a $PSDefaultParameterValues
, use o método Add()
. Adicionar um valor não afeta os valores existentes da hashtable. Use uma vírgula (,
) para separar a chave do valor .
$PSDefaultParameterValues.Add('Get-Process:Name', 'PowerShell')
A hashtable criada no exemplo anterior é atualizada com um novo par chave-valor.
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-Process:Name PowerShell
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Remover um valor de $PSDefaultParameterValues
Para remover um valor de $PSDefaultParameterValues
, use o método Remove()
.
A remoção de um valor não afeta os valores existentes da hashtable.
Este exemplo remove o par chave-valor que foi adicionado no exemplo anterior.
PS> $PSDefaultParameterValues.Remove('Get-Process:Name')
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Alterar o valor no $PSDefaultParameterValues
Use a indexação ou o acesso de membro para alterar o valor padrão de um par chave-valor existente. Neste exemplo, o valor padrão para a chave Send-MailMessage:SmtpServer
é alterado para um novo valor de 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
Desativar ou reativar $PSDefaultParameterValues
Você pode desativar temporariamente e, em seguida, reativar $PSDefaultParameterValues
o .
A desativação $PSDefaultParameterValues
é útil se você estiver executando scripts que precisam de valores de parâmetro padrão diferentes.
Para desativar $PSDefaultParameterValues
, adicione uma chave de Disabled
com um valor de $true
. Os valores em $PSDefaultParameterValues
são preservados, mas não são usados.
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
Para reativar $PSDefaultParameterValues
, remova a chave Disabled
ou altere o valor da chave Disabled
para $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