Passwörter sicher speichern - die PowerShell, dein Freund und Helfer
Wer kennt das nicht: Man hätte gern ein PowerShell-Skript, das beim Login einige Anmeldungen automatisch durchführt. Das Skript selbst ist meist auch gar nicht das Problem. Man steht oft nur vor dem Problem, was mit den Passwörtern passiert.Diese als Klartext im Skript zu hinterlegen ist nicht gerade die schönste und sicherste Lösung. Jedes Mal nach dem Passwort gefragt werden ist allerdings auch nicht immer praktikabel.
Im Folgenden zeige ich, wie man ein Passwort sicher speichert, es wieder ausliest und dann in einem Skript verwendet.
Passwörter in der PowerShell - SecureString
Für das Verwenden von Passwörtern in der PowerShell hat Microsoft den SecureString vorgesehen. Er speichert das Passwort innerhalb der PowerShell-Session verschlüsselt. Um einen SecureString zu erzeugen, gibt es mehrere Möglichkeiten:
1. Das Konvertieren von Klartext in einen SecureString
Hat man in einer Variable $password ein Klartextpasswort, kann man über folgenden Befehl das Passwort als SecureString in der Variable $securePass ablegen: $securePass = $password | ConvertTo-SecureString -AsPlainText -Force
2. Die direkte Eingabe eines SecureStrings
Über $securePass = Read-Host -AsSecureString kann man eine Benutzereingabe direkt als SecureString ablegen.
3. Das Einlesen aus einer Datei
Wie beim Konvertieren aus einem Klartext, kann man auch beim Einlesen aus einer Datei direkt einen SecureString machen: $securePass = cat pass.txt | ConvertTo-SecureString
Das Speichern
Um den SecureString nun auch sicher zu speichern, kann man ihn einfach in eine Textdatei ausgeben. Um den SecureString $securePass verschlüsselt abzuspeichern nimmt man folgenden Befehl:
ConvertFrom-SecureString $securePass | Out-File pass.txt
Das Passwort wird nun nicht als Klartext gespeichert, sondern als kryptische Zahlen-Buchstaben-Kombination.
Das Laden
Um ein zuvor gespeichertes Passwort wieder in einen SecureString zu konvertieren, nimmt man den oben erwähnten Befehl $securePass = cat pass.txt | ConvertTo-SecureString
Zurück zum Klartext
Da viele externe Skripts den SecureString nicht unterstützen, muss man nun aus dem SecureString $securePass wieder Klartext $pass machen. Dies geht über einen kleinen Umweg über den Typ BSTR:
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securePass) $pass = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Nun hat man in $pass das Klartextpasswort wieder in einer Variable vorliegen und kann es wie gewohnt verwenden.
- ASP.NET 1
- Active Directory 41
- Administration Tools 1
- Allgemein 60
- Backup 4
- ChatBots 5
- Configuration Manager 3
- DNS 1
- Data Protection Manager 1
- Deployment 24
- Endpoint Protection 1
- Exchange Server 62
- Gruppenrichtlinien 4
- Hyper-V 18
- Intune 1
- Konferenz 1
- Künstliche Intelligenz 7
- Linux 3
- Microsoft Office 11
- Microsoft Teams 1
- Office 365 11
- Office Web App Server 1
- Powershell 21
- Remote Desktop Server 1
- Remote Server 1
- SQL Server 8
- Sharepoint Server 12
- Sicherheit 1
- System Center 10
- Training 1
- Verschlüsselung 2
- Virtual Machine Manager 1
- Visual Studio 1
- WSUS 7
- Windows 10 12
- Windows 8 9
- Windows Azure 4
- Windows Client 1
- Windows Server 24
- Windows Server 2012 7
- Windows Server 2012R2 15
- Windows Server 2016 7
- Windows Server 2019 2
- Windows Server 2022 1
- Zertifikate 4