parâmetro obrigatório powershell com o valor por omissão mostrado
Estou à procura de uma forma de ter um script PowerShell pedir um parâmetro que precisa ser obrigatório, mas mostrado com um valor padrão, por exemplo:
.\psscript
Supply values for the following parameters:
parameter1[default value]:
parameter2[1234]:
quero pedir dados de entrada, mas fornecer alguns valores predefinidos.
Se eu usar a opção obrigatória, ela pede os valores gentilmente, mas não mostra o valor padrão ou processa o valor indicado. Se não o tornar obrigatório, a PowerShell não pede o valor.
Aqui estão alguns exemplos de scripts I tentei. [CmdletBinding()]
Param(
[parameter(Mandatory=$true)] $SqlServiceAccount = $env:computername + "_sa",
[parameter(Mandatory=$true)] $SqlServiceAccountPwd
)
Este programa pede parâmetros mas não mostra nem processa o valor por omissão se carregar em enter no primeiro parâmetro.
[CmdletBinding()]
Param(
[parameter(Mandatory=$false)] $SqlServiceAccount = $env:computername + "_sa",
[parameter(Mandatory=$true)] $SqlServiceAccountPwd
)
Este script não pede o primeiro parâmetro, mas processa o valor padrão.
3 answers
[CmdletBinding()]
Param(
$SqlServiceAccount = (Read-Host -prompt "SqlServiceAccount ($($env:computername + "_sa"))"),
$SqlServiceAccountPwd = (Read-Host -prompt "SqlServiceAccountPwd")
)
if (!$SqlServiceAccount) { $SqlServiceAccount = $env:Computername + "_sa" }
...
Não há uma maneira de fazer o que você quer com um parâmetro obrigatório e powershell pedindo para você.
Em vez disso, teria de torná-lo opcional (remover o obrigatório), e depois implementar o código de sugestão você mesmo ({[[0]}, mas tome a resposta em branco como um padrão; algo do género).
Por definição: os parâmetros obrigatórios não têm valores por defeito. Mesmo se você fornecer um, PowerShell irá pedir o valor, a menos que especificado quando o comando é chamado. Há, no entanto, uma maneira "hacky" de obter o que você pede. Como as variáveis (e como consequência - parâmetros) podem ter qualquer nome que desejar, é suficiente definir um comando com parâmetros que correspondam à linha de comandos que deseja ver:
function foo {
param (
[Parameter(Mandatory = $true)]
[Alias('Parameter1')]
[AllowNull()]
${Parameter1[default value]},
[Parameter(Mandatory = $true)]
[Alias('Parameter2')]
[AllowNull()]
${Parameter2[1234]}
)
$Parameter1 =
if (${Parameter1[default value]}) {
${Parameter1[default value]}
} else {
'default value'
}
$Parameter2 =
if (${Parameter2[1234]}) {
${Parameter2[1234]}
} else {
1234
}
[PSCustomObject]@{
Parameter1 = $Parameter1
Parameter2 = $Parameter2
}
}
Quando os parâmetros W/o são chamados, a função irá apresentar ao utilizador a resposta que corresponder nomes dos parâmetros. Quando chamado com -Parameter1 notDefaultValue
e / ou com -Parameter2 7
, os nomes alternativos irão ligar-se e atribuir valor passado ao parâmetro seleccionado. Como variáveis com esse nome não são divertidas de trabalhar - faz sentido atribuir valor (por omissão ou passado pelo utilizador) a uma variável que corresponda ao nosso nome de parâmetro alias/ falsos.