Netz-Weise Logo

Weisheiten - der Netz-Weise Blog

Hier finden Sie Tipps und Tricks für vor, während und nach der Schulung.
1 Minuten Lesezeit (286 Worte)

Einen Secure String oder ein PSCredential-Objekt wieder in ein Klartextkennwort umwandeln

In Powershell ist es oft  notwendig, einen Secure-String zu erzeugen. SecureStrings werden z.B. zum Erstellen eines AD-Benutzers verwendet, oder für alle möglichen Arten von Anmeldeinformationen. Das Geheimnis eines SecureStrings besteht darin, dass er über die Microsoft DPAPI (Data Protection API) durch das Konto des Benutzers geschützt ist, der den SecureString erzeugt hat. Dadurch kann nur er auf das Kennwort des SecureStrings zugreifen. 

Manchmal gibt es aber die Situation, in der man das Kennwort eines Securestrings gerne wieder im Klartext hätte. Als Beispiel dafür soll Read-Host herhalten, das Benutzereingaben von der Konsole liest. Ruf man Read-Host mit dem Parameter -Prompt auf, kann man den Benutzer zu einer Eingabe auffordern: 

$Password = Read-Host -Prompt "Bitte geben Sie ein Kennwort ein"

Das Kennwort wird als String in der Variablen $Password gespeichert. Leider wird das Kennwort aber bei der Eingabe im Klartext angezeigt. Das kann man über den Parameter -AsSecurestring verhindern. Dadurch wird die Eingabe in einen SecureString konvertiert und die Eingabe wird durch das * maskiert:

$Password = Read-Host -Prompt "Bitte geben Sie ein Kennwort ein" -AsSecureString
Bitte geben Sie ein Kennwort ein: ********

Wenn man mit dem Kennwort z.B. ein PSCredentialObjekt erzeugen möchte, ist alles Super, denn dann braucht man das Kennwort nicht einmal mehr in einen SecureString umzuwandeln. Wenn man aber das Kennwort im Klartext benötigt, hat man ein Problem. Der SecureString stellt nämlich keine Möglichkeit zur Verfügung, das Kennwort wieder in Klartext umzuwandeln. Glücklicherweise bietet das PSCredential-Objekt aber so eine Möglichkeit, nämlich die Methode GetNetworkCredential(). Um das Kennwort wieder im Klartext zu sehen, hier das komplette Skript: 

$Password = Read-Host -Prompt "Bitte geben Sie ein Kennwort ein" -AsSecureString
$Credential = New-Object -TypeName PSCredential("Holger",$Password)
$credential.GetNetworkCredential().Password

Links

Create Scheduled Tasks with Secure Passwords

Windows Data Protection API

 

Inaktive Benutzer oder Computer mit Powershell fin...
Datums- und Zeitwerte Kulturunabhängig speichern

Ähnliche Beiträge

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Sonntag, 19. Mai 2024

Sicherheitscode (Captcha)