Hm, acho que você tem muitos conjuntos de parâmetros. Também não sei por que você tem parâmetros separados de usuário / senha e um parâmetro PSCredential. Você deve apenas usar o PSCredential. Mas vou assumir que você precisa disso por algum motivo (por favor, considere alterá-lo).
4 conjuntos de parâmetros:
- ComputerNameCred
- Nome_do_computadorPlain
- IpAddressCred
- IpAddressPlain
function Thing {
[CmdletBinding(DefaultParameterSetName="ComputerNameCred")]
Param
(
# computername: Name of the host you want to connect to.
[Parameter(Mandatory=$true,ParameterSetName="ComputerNameCred", Position=0)]
[Parameter(Mandatory=$true,ParameterSetName="ComputerNamePlain", Position=0)]
[String]$computername,
# ipAddress: Ip Address of the host you want to connect to.
[Parameter(Mandatory=$true,ParameterSetName="IpAddressCred", Position=0)]
[Parameter(Mandatory=$true,ParameterSetName="IpAddressPlain", Position=0)]
[String]$ipAddress,
# credentials: PowerShell credentials use to connect to the host.
[Parameter(Mandatory=$true,ParameterSetName="ComputerNameCred")]
[Parameter(Mandatory=$true,ParameterSetName="IpAddressCred")]
[PSCredential]$credentials,
# adminUser: Username to use to connect to the host.
[Parameter(Mandatory=$true,ParameterSetName="IpAddressPlain")]
[Parameter(Mandatory=$true,ParameterSetName="ComputerNamePlain")]
[String]$adminUser,
# adminPassword: Password to use to connect to the host.
[Parameter(Mandatory=$true,ParameterSetName="IpAddressPlain")]
[Parameter(Mandatory=$true,ParameterSetName="ComputerNamePlain")]
[String]$adminPassword
)
}
Get-Help Thing # use this to make sure your parameter sets are as they should be.
Eu também removi [switch]
do seu parâmetro de endereço IP; Não tenho certeza porque isso estava lá. Você pode considerar o uso de [System.Net.IPAddress]
para esse parâmetro em vez de [String]
. Ele ainda aceitará strings (elas serão convertidas), mas valida automaticamente o parâmetro, pois o cast falhará se não for um IP válido.