Você provavelmente quer implementar a verificação de parâmetros em sua função. MS diz que os conjuntos de parâmetros precisam ter um parâmetro exclusivo para seu conjunto de parâmetros. Assim, cada conjunto de parâmetros deve ter um parâmetro que não pertença a nenhum outro conjunto de parâmetros, que é o motivo do seu erro ao tentar chamar a função com apenas um parâmetro, ele não sabe qual conjunto de parâmetros para atribuir b / c o parâmetro fornecido não é exclusivo de um determinado conjunto de parâmetros. Cheguei perto com
function Foof{
[CmdLetBinding(DefaultParameterSetName="None")]
param(
[Parameter(Mandatory=$false,ParameterSetName="A")]
[Parameter(Position=0)]
[int]
$A,
[Parameter(Mandatory=$false,ParameterSetName="B")]
[Parameter(Mandatory=$false,ParameterSetName="both")]
[Parameter(Position=1)]
[int]
$B,
[Parameter(Mandatory=$false,ParameterSetName="both")]
[int]
$C=$true
)
Write-Host $PsCmdlet.ParameterSetName
write-host "A=$A and B=$B and C=$C"
}
Eu pensei que atribuir $C
a um valor padrão daria o seu comportamento esperado, mas não b / c o parâmetro deve ser declarado explicitamente ao chamar a função.
Você notará que eu defini o DefaultParameterSetName como "None". O que isto faz é dar-lhe um rápido foi verificar o caso se nenhum parâmetro foi submetido.
Você poderia fazer algo como verificar se $PsCmdlet.ParameterSetName -eq "None"
, em seguida, Read-Host
qualquer variável que você deseja fornecer, ou apenas gerar um erro informando que a variável a
ou b
deve ser fornecida.