Especificar o tipo correto de senha deve ser suficiente, tente:
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(Mandatory=$True)]
[Security.SecureString]$password
)
O PowerShell irá "mascarar" a senha (o mesmo que para o read-host -asSecureString) e o tipo de resultado será aquele que outros cmdlets podem exigir.
EDITAR: Após comentários recentes: solução, que fornece a opção de fornecer senha em texto simples, ou o usuário força para digitar a senha (mas mascarar da mesma maneira como Read-Host -AsSecureString seria) e em ambos os casos, obter [Security.SecureString] no final. E, como bônus, você recebe um aviso de sua senha secreta. ;)
[CmdletBinding(
DefaultParameterSetName = 'Secret'
)]
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(
Mandatory = $True,
ParameterSetName = 'Secret'
)]
[Security.SecureString]${Type your secret password},
[Parameter(
Mandatory = $True,
ParameterSetName = 'Plain'
)]
[string]$Password
)
if ($Password) {
$SecretPassword = $Password | ConvertTo-SecureString -AsPlainText -Force
} else {
$SecretPassword = ${Type your secret password}
}
Do-Stuff -With $SecretPassword
Eu usei o truque do Jaykul aqui para enganar com a solicitação de senha segura. ;) Tornará esse parâmetro muito difícil de usar no modo CLI (-Type sua senha secreta não funcionará como esperado), portanto, deve forçar os usuários do script a omitir a senha (e obter um prompt mascarado) ou especificá-lo com O parâmetro -password que aceita string regular e converte-a em string segura dentro da lógica do script.