script - secure string powershell
¿Cómo puedo usar la función de host de lectura de powershell para aceptar una contraseña para un servicio externo? (2)
$ Contraseña es una cadena de seguridad, y esto devolverá la contraseña de texto sin formato.
[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password))
Tengo un script que estoy escribiendo que hace una conexión a un servicio SOAP. Después de que se realiza la conexión, necesito pasar un nombre de usuario / pase con cada comando que envío. El problema que tengo es que cuando uso read-host para hacer esto, mi contraseña se muestra en texto claro y permanece en el shell:
PS C:/Users/Egr> Read-Host "Enter Pass"
Enter Pass: MyPassword
MyPassword
Si lo oculto con -AsSecureString, el valor ya no se puede pasar al servicio porque ahora es un objeto System.Security.SecureString:
PS C:/Users/gross> Read-Host "Enter Pass" -AsSecureString
Enter Pass: **********
System.Security.SecureString
Cuando paso esto, no funciona. No me importan las contraseñas que se pasan al servicio en texto claro, simplemente no quiero que se queden en el shell de un usuario después de ingresar su contraseña. ¿Es posible ocultar la entrada del host de lectura, pero aún así tener la contraseña almacenada como texto claro? Si no es así, ¿hay alguna manera de pasar el objeto System.Security.SecureString como texto sin cifrar?
Gracias
Puede guardar la contraseña (entrada) como variable y pasarla a su servicio. Si el código se ejecuta en un script o como una función, la variable que contiene la contraseña se eliminará después de que se haga (se almacenan en un ámbito local temporal). Si ejecuta los comandos en la consola (o la fuente de puntos es la secuencia de comandos como . ./myscript.ps1
), la variable de contraseña permanecerá en el alcance de la sesión y se almacenarán hasta que la elimine o cierre la sesión. Si desea asegurarse de que la variable se elimine después de ejecutar la secuencia de comandos, puede eliminarla usted mismo. Me gusta esto:
#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 obtener más información sobre cómo se almacenan las variables en los ámbitos, consulte about_Scopes