Eine ganze Reihe von Powershell-Commandlets haben einen Parameter -Credential, der es erlaubt, ein Commandlet über das Netzwerk unter anderen Benutzerrechten zu starten. Das Commandlet Get-Credential liefert das hierzu notwendige Powershell Credential Objekt, das den Benutzernamen und das Kennwort für die Anmeldung enthält. Will man die Benutzerinformationen aber nicht interaktiv abfragen, sondern Scripten, hilft das interaktive Get-Credential nicht weiter. Stattdessen kann man aber die Benutzerinformationen in eine Datei speichern. Will man die Benutzerinformationen einfach in der gleichen Benutzersitzung weiterverwenden, kann man die Benutzerinformationen einfach an Export-CliXML weiterleiten:
$user = Get-Credential
$user | Export-CliXML C:\temp\user.xml
Dieser Befehlt ruft Benutzerinformationen ab und leitet diese direkt in die XML-Datei user.xml um. Die Daten werden allerdings vom System verschlüsselt und sind nur unter dem Benutzer wiederverwendbar, der die Datei angelegt hat. Das ist in den seltensten Fällen hilfreich. Um das Kennwort sicher und aus anderen Sitzungen verwenden zu können, helfen die Commandlets ConvertFrom-SecureString und ConvertTo-Securestring weiter. Mit Ihnen kann das vom System mit den Benutzerinformationen verschlüsselte Kennwort in ein mit AES verschlüsselten String umgewandelt bzw. wieder in einen Secure-String zurückgewandelt werden. Um das Kennwort eines Benutzers zu verschlüsseln und in einer Datei zu speichern:
$user = get-Credential
$user.password | ConvertFrom-Securestring -Key (1..16) | out-file .\Password.txt
Um die Daten zu reimportieren:
$user = "nw\Holger"
$pw = get-content .\Password.txt | ConvertTo-Securestring -key (1..16)
$Cred = New-Object System.Management.Automation.PSCredential $user, $Password
ConvertFrom-Securestring nimmt das vom System gesicherte Kennwort, entschlüsselt und sichert es erneut mit AES. -Key übergibt den symmetrischen Schlüssel, mit dem das Kennwort gesichert wird. Der Schlüssel muß 128, 192 oder 256 Bit lang sein, daher muß das Kennwort aus 8, 12 oder 16 Zeichen bestehen. Die Zeichen werden in Form eines Byte-Arrays übergeben. Das sehr einfache Beispiel gilt nur Demo-Zwecken und sollte in der Praxis nicht nachgeahmt werden, denn (1..16) erzeugt ein Array von Zahlen von 1 bis 16. ConvertFrom-Securestring wandelt das Kennwort wieder zurück in einen Secure Key. Mit New-Object wird ein neues Benutzerobjekt erzeugt und ein Benutzername und das Kennwort als Secure String übergeben. Damit können die Credentials jetzt auch unter einem anderen Benutzerkonto verwendet werden.