web-dev-qa-db-fra.com

Comment puis-je utiliser la fonction de lecture hôte de powershell pour accepter un mot de passe pour un service externe?

J'ai un script que j'écris qui établit une connexion à un service SOAP. Une fois la connexion établie, je dois transmettre un nom d'utilisateur/passe avec chaque commande que j'envoie. Le problème J'ai que lorsque j'utilise read-host pour ce faire, mon mot de passe est affiché en texte clair et reste dans le shell:

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

Si je le cache avec -AsSecureString, la valeur ne peut plus être transmise au service car il s'agit désormais d'un objet System.Security.SecureString:

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

Quand je passe ça, ça ne marche pas. Je ne me soucie pas que les mots de passe soient transmis au service en texte clair, je ne veux simplement pas qu'ils restent sur le shell d'un utilisateur après avoir entré leur mot de passe. Est-il possible de masquer l'entrée de lecture-hôte, mais de conserver le mot de passe en texte clair? Sinon, existe-t-il un moyen de passer l'objet System.Security.SecureString en texte clair?

Merci

25
EGr

$ Password est un Securestring, et cela renverra le mot de passe en texte brut.

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

Vous pouvez enregistrer le mot de passe (entrée) en tant que variable et le transmettre à votre service. Si le code est exécuté dans un script ou en tant que fonction, la variable contenant le mot de passe sera supprimée une fois cela fait (ils sont stockés dans une portée locale temporaire). Si vous exécutez les commandes dans la console (ou dot-source le script comme . .\myscript.ps1), la variable de mot de passe restera dans la portée de la session et sera stockée jusqu'à ce que vous la supprimiez ou fermiez la session. Si vous voulez être sûr que la variable est supprimée après l'exécution de votre script, vous pouvez la supprimer vous-même. Comme ça:

#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

Pour en savoir plus sur la façon dont les variables sont stockées dans les étendues, consultez about_Scopes

2
Frode F.