I am facing a weird issue and I don't have any idea why it is not working. I looked in all the documentation and tried different solution but nothing.
I am trying to script in powershelgl a simple command that takes 2 value:
I would like to have the value
secured during the powershell execution, and when the script is finish, to see those parameters stored in a azure KeyVault -> Secrets.
I have set this code:
$SecretName = Read-Host "Enter Secret Name"
$password = Read-Host "Enter password" -AsSecureString
$password = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$password = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($password)
Set-AzKeyVaultSecret -VaultName "keyvaultname" -Name $SecretName -SecretValue $password
But this it gives me the following error:
Cannot bind parameter 'SecretValue'. Cannot convert the "asdlkjiou" value of type "System.String" to type "System.Security.SecureString".
Notice: I am converting back the password because if I don't do so, the code runs, but the value in the KeyVault is showed as follow System.Security.SecureString
I am pretty much lost here, haven't used Windows PowerShell in a long time and none of the solution or documentation I found helped me to solve this problem.
Please, if anyone can direct me on how I can achieve this, I would be grateful.
And please if you need more infos, don't hesitate to ask me
You don't need to perform those conversions with the InteropServices
calls. Just use these three lines. The password
variable is already of the correct type since you're reading it -AsSecureString
.
$SecretName = Read-Host "Enter Secret Name"
$password = Read-Host "Enter password" -AsSecureString
Set-AzKeyVaultSecret -VaultName 'keyvaultname' -Name $SecretName -SecretValue $password