Mit der Powershell funktion ConvertFrom-SecureString und der Windows Data Protection API (DPAPI) kann man Passwörter oder andere wichtige Informationen Rechnerbezogen sicher verschlüsseln und in einer Datei abspeichern.
Alternativ kann man auch ein Key übergeben. Wird kein Key übergeben wird per DPAPI verschlüsselt. Damit ist die verschlüsselte Zeichenkette aber nur auf dem Rechner verwendbar und kann nicht ausgetauscht werden. Dies ist natürlich auch der große Vorteil.
Ausführliche Dokumentation über: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/convertfrom-securestring?view=powershell-7.3&viewFallbackFrom=powershell-7.1&WT.mc_id=email
Abspeichern
Ablauf um ein Passwort abzufragen und unter Documents abzuspeichern ist wie folgt:
- Abfrage des Dokumentenpfads aus der Registry
- Einlesen des Passworts
- Konvertierung und Abspeichern in einer Datei
$documentpath = (Get-ItemProperty -Path Registry::"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name Personal).Personal $password = Read-Host "Bitte Passwort eingeben" -AsSecureString $password | ConvertFrom-SecureString | Out-File $documentpath\password.txt
Auslesen
Ablauf um ein Passwort aus einer Datei auszulesen und in $credentials abzuspeichern.
- Abfrage des Dokumentenpfads aus der Registry
- Benutzernamen in Variable schreiben
- Passworts aus Datei Auslesen
- Benutzername und Passwort in ein Credential Objekt abspeichern
$documentpath = (Get-ItemProperty -Path Registry::"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name Personal).Personal $username = "Name@domain.de" $password = Get-Content $documentpath\password.txt | ConvertTo-SecureString $credentials = New-Object System.Management.Automation.PSCredential ($username, $password)
Wofür das ganze?
Um zum Beispiel in einem Powershellsript eine Mail per SMTP zu versenden.
Send-MailMessage –From <O365 email address> –To <Recipient email address> –Subject "Test Email" –Body "Test SMTP Service from Powershell on Port 587" -SmtpServer smtp.office365.com -Credential $credentials -UseSsl -Port 587