Die cmdlet Get-Credential eignet sich hervorragend um eine Benutzerauthentifizierung durchzuführen. Das eingegebene Passwort wird als Secure String hinterlegt und kann somit nicht ohne Weiteres als Klartext ausgeben werden. Versucht man das Passwort als String auszugeben wird lediglich „System.Security.SecureString“ angezeigt. Um Benutzername und Passwort in einem Script verwenden zu können muss der Input natürlich in eine Variable gespeichert werden. Dies geschieht hier mit $MyCredential. Über $MyCredential.UserName lässt sich der Benutzername ausgeben. Das eingegebene Passwort hingegen nicht.
1 2 3 4 5 6 7 8 |
$MyCredential = Get-Credential #Variablen $MyCredential.UserName $MyCredential.Password #Ausgabe #Stefan.Rehwald #System.Security.SecureString |
Natürlich kann das Passwort auch mittels einer cmdlet wieder entschlüsselt werden. Dies ist allerdings nur in beschränkten Maße möglich. Bei der Verschlüsselung des SecureString wird die SID des Benutzers und des Computers verwendet. So ist es nur dem Benutzer möglich den SecureString wieder zu entschlüsseln, der ihn verschlüsselt hat und das nur auf dem selben Computer wo er den Verschlüsselung vorgenommen hat. Ändert sich die SID des Benutzers oder des Computers ist die Datei Müll. Die Console wirft dann Fehler wie „Schlüssel ist im angegebenen Status nicht möglich“.
1 2 3 4 5 6 7 8 |
$MyCredential = Get-Credential #Variablen $MyCredential.UserName $MyCredential.GetNetworkCredential().password #Ausgabe #Stefan.Rehwald #GehE!mesPass0R7* |
So sieht die Eingabebox der cmdlet aus. Diese lässt sich noch einwenig anpassen.
In dem Hinweistext können auch Variablen verarbeitet werden. In diesem Beispiel sind keine Variablen verwendet worden. Dennoch wäre es möglich vorher ermittelte Daten wie z.B. der letzte Logon des Users, etc. zu implementieren.
1 |
Get-Credential -Message "Bitte geben Sie ihr Password ein" |
Vordefinierte Benutzernamen sind ebenfalls möglich.
1 |
Get-Credential -Message "Bitte geben Sie ihr Password ein" -UserName "Stefan.Rehwald" |
Hier ein Beispiel um eine Passwortabfrage zu prüfen. Der große Nachteil dieses Script ist, das das Passwort in Klartext hinterlegt werden muss. Doch Für dieses Problem gibt es auch eine Lösung. Dazu mehr in einem nächsten Artikel. Ich werde beschreiben wie sich Passwörter sicher in Textfiles scheiben lassen und wie man diese für spätere Zwecke wieder nutzen kann.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$MyCredential = Get-Credential $MyCredential.Password.Length #password entschlüsseln $MyCredential.GetNetworkCredential().password if ($MyCredential.GetNetworkCredential().password -eq "MyP4SsW0R7!") { "Korrektes Kennwort." } else { Write-Host "Falsches Kennwort!" } |
So viel zu den Grundlagen zu Get-Credential.
rewe
Ein Gedanke zu „PowerShell – 07.1 – Get-Credential“