Especificar o tipo correto de senha deve ser suficiente, tente:
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(Mandatory=$True)]
[Security.SecureString]$password
)
O PowerShell "mascarará" a senha (igual à do host de leitura comoSecureString) e o tipo de resultado será o que outros cmdlets podem exigir.
EDIT: Após comentários recentes: solução, que oferece as duas opções para fornecer senha de texto sem formatação ou forçar o usuário a digitar a senha (mas mascarar da mesma maneira que Read-Host -AsSecureString faria) e, em ambos os casos, obter [Security.SecureString] no final . E, como bônus, você recebe um prompt sofisticado para 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 de Jaykul aqui para enganar solicitando uma senha segura. ;) Tornará esse parâmetro muito difícil de usar no modo CLI (-Digite sua senha secreta não funcionará conforme o esperado), portanto, deve forçar os usuários do script a omitir a senha (e obter prompt mascarado) ou especificá-lo com -password parâmetro que aceita string regular e o converte em string segura dentro da lógica do script.
É um pouco difícil decifrar o que você está tentando fazer ...
Editar; como mencionado por Ryan, você já o está especificando como uma sequência ...
Mas, em algum código, usei a seguinte função ao usar o Read-Host e o SecureStrings
No seu caso, você chamaria assim:
EDIT: Dado comentários, e apenas para o inferno ... aqui está um método alternativo usado para converter a string segura acima em texto sem formatação no Powershell;
Você usaria assim;
Resumindo demais, você pega a senha em mascarada, é uma string segura, e pode ser dividida em texto sem formatação para uso em outros lugares; um exemplo de palavra real seria se certos programas CLI aceitassem apenas senhas passadas para eles como texto sem formatação, isso ajuda na automação onde você não deseja codificar uma senha no seu script.
fonte
Não sei se entendi ... parece que você já está fazendo isso. Ao definir o parâmetro como obrigatório, o Powershell solicitará se você não o fornecer na linha de comando, e com [string] você garantirá que o único tipo de dados que pode entrar nessa variável seja System.string.
EDIT: Com base na resposta de Bartek, faça isso no seu script:
Então você deve passar ao seu script um objeto SecureString da seguinte maneira:
fonte