Powershell store password with encryption key

Hallo zusammen,

Sicher steht der eine oder andere auch vor der Herausforderung, Credentials in Scripten zu verwenden. Dabei sollten die ja nicht gerade im Cleartext in den Scripten sichtbar sein.

Mit folgendem Vorgehen, werden die Passwörter mit einem AES Key Encrypted und gespeichert.

AES Encryption Key anlegen

$Key = New-Object Byte[] 32

[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key)

$Key | out-file E:\Scripting\aes.key

Passwort mit dem Encryption Key speichern

(get-credential).Password | ConvertFrom-SecureString -key (get-content E:\Scripting\aes.key) | set-content "E:\Scripting\password.txt"

So sieht hinterher das Passwortfile aus.

Das Passwort mit dem Encryption Key laden und in ein PSCredential Objekt speichern

$password = Get-Content E:\Scripting\password.txt | ConvertTo-SecureString -Key (Get-Content E:\Scripting\aes.key)

$cred = New-Object System.Management.Automation.PsCredential("a.bohren@icewolf.ch",$password)

Damit kann man sich anschliessend beispielsweise an Exchange Online anmelden

Connect-ExchangeOnline -Credential $cred

Natürlich kann sich jeder mit Zugang zum Server, mit der gleichen Vorgehensweise ein Credential Objekt erzeugen und sich damit anmelden. Allerdings ist das schon sehr viel sicherer, als wenn die Credentials offen und nicht verschlüsselt im Script ersichtlich sind.

Liebe Grüsse
Andres Bohren