Powershell TextBox SecureString

LTrig picture LTrig · Jan 21, 2015 · Viewed 20.9k times · Source

Is it possible using the System.Windows.Forms.TextBox (or any other method) to enter in text that can then be converted to securestring? I would like to be able to take a value entered, convert it to securestring and write that to a file which could then be called on if needed and the securestring converted back should we need to identify the value.

I've looked into something similar to this, but since I am using the TextBox forms, I don't want to rely on Read-Host

$secstr = Read-Host -AsSecureString "Enter your text"

$secstr | ConvertFrom-SecureString | out-file C:\temp\test.txt

$secstr = get-content c:\temp\test.txt | ConvertTo-SecureString -AsPlaintText -Force

Essentially, I want to have a text box use masked/password characters (which I can do with $TextBox.PasswordChar = "*" and then take that input and dump it into a securestring text file. Then, I could use another script to call on that file and display the text in plain text for the end user should they need to know that current value.

Answer

Ansgar Wiechers picture Ansgar Wiechers · Jan 21, 2015

Use a MaskedTextBox instead of a regular TextBox if you want to embed this in a custom GUI:

Add-Type -Assembly 'System.Windows.Forms'

$form = New-Object Windows.Forms.Form

$password = New-Object Windows.Forms.MaskedTextBox
$password.PasswordChar = '*'
$password.Top  = 100
$password.Left = 80

$form.Controls.Add($password)

$form.ShowDialog()

[source]

and then convert the text to a secure string:

$secstr = $password.Text | ConvertTo-SecureString -AsPlaintText -Force

If you just want to prompt for credentials you could use Get-Credential, which already stores the entered password as a secure string:

PS C:\> $cred = Get-Credential

Cmdlet Get-Credential an der Befehlspipelineposition 1
Geben Sie Werte für die folgenden Parameter an:
Credential
PS C:\> $cred.Password
System.Security.SecureString