ti-enxame.com

Como posso usar a função de leitura de host do powershell para aceitar uma senha para um serviço externo?

Eu tenho um script que estou escrevendo que faz uma conexão com um serviço SOAP. Depois que a conexão é feita, eu preciso passar o nome de usuário/passar com todos os comandos enviados). O que tenho é que, quando uso o read-Host para fazer isso, minha senha é mostrada em texto não criptografado e permanece no Shell:

PS C:\Users\Egr> Read-Host "Enter Pass"
Enter Pass: MyPassword
MyPassword

Se eu o ocultar com -AsSecureString, o valor não poderá mais ser passado para o serviço porque agora é um objeto System.Security.SecureString:

PS C:\Users\gross> Read-Host "Enter Pass" -AsSecureString
Enter Pass: **********
System.Security.SecureString

Quando passo isso, não funciona. Eu não me importo com as senhas sendo passadas para o serviço em texto não criptografado, só não quero que elas permaneçam no Shell de um usuário depois que elas digitarem sua senha. É possível ocultar a entrada Read-Host, mas a senha ainda está armazenada como texto não criptografado? Caso contrário, existe uma maneira de transmitir o objeto System.Security.SecureString como texto não criptografado?

Obrigado

23
EGr

$ Password é um Securestring, e isso retornará a senha em texto sem formatação.

[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password))
37
Musaab Al-Okaidi

Você pode salvar a senha (entrada) como uma variável e passá-la ao seu serviço. Se o código for executado em um script ou como uma função, a variável que contém a senha será excluída após a conclusão (elas são armazenadas em um escopo local temporário). Se você executar os comandos no console (ou forneça pontos do script como . .\myscript.ps1), a variável de senha permanecerá no escopo da sessão e será armazenada até que você a exclua ou feche a sessão. Se você deseja garantir que a variável seja removida após a execução do script, você mesmo poderá excluí-la. Como isso:

#Get password in cleartext and store in $password variable
$password = Read-Host "Enter Pass"

#run code that needs password stored in $password

#Delete password
Remove-Variable password

Para ler mais sobre como as variáveis ​​são armazenadas nos escopos, consulte about_Scopes

2
Frode F.