Tenho uma função que obtém o status de um serviço remoto do Windows. 2 parâmetros obrigatórios. O primeiro pode ser uma string ou uma tabela hash, e o segundo é sempre uma string (nome do status do serviço do Windows). Exemplo:
function Get-Service-Status([Parameter(ParameterSetName=‘string’, Position=0)][string] $groupString, [Parameter(ParameterSetName=‘hash’, Position=0)][string] $groupHash, [Parameter(ParameterSetName=‘string’, Position=1)][string] $status){
if($PSCmdlet.ParameterSet -eq ‘string’){
$myhash= Convert-To-Hash $groupString;
# function just returns @{“service”=“ABC”;”hostname”=“myhost”;};
}else{
$myhash= $groupHash;
}
…
}
# example usage:
Get-Service-Status “ABC” “Running”
$service=@{“service”=“ABC”;”hostname”=“myhost”;};
Get-Service-Status $service “Running”
No entanto, isso não parece funcionar e gerará um erro na linha 1 char 1 que Um parâmetro posicional não pode ser encontrado que aceite o argumento “Running”
Minha intenção era tentar criar uma função polimórfica onde a mesma função pudesse ser usada ao passar parâmetros de tipos de parâmetros diferentes (onde o tipo seria resolvido dentro da função, neste caso, usar hashtable se hashtable for fornecido e converter para hashtable se string for fornecida)
O erro que você vê é porque
-status
o parâmetro só está disponível para ostring
Parameter Set e você está tentando usá-lo nohash
conjunto também. Se você quisesse que esse parâmetro estivesse disponível em ambos os conjuntos, então você deveria adicionar uma nova[Parameter(...)]
declaração usando ohash
Parameter Set.Outro problema é que você
-groupHash
digitou as[string]
quando deveria ser[hashtable]
, caso contrário a tabela de hash será convertida em uma string e ficará inutilizável na sua função.