PowerShell und der Secure String

Wenn man,wie in meinen letzen Blogeinträgen ([1] und [2]) gezeigt, Benutzer im AD per PowerShell anlegen möchte, ist es durchaus sinnvoll bei jedem Benutzer ein zufälliges Passwort zu vergeben. Die PowerShell verwendet für Passwörter den sogenannten Secure String. Um das Erzeugen eines zufälligen SecureString mit fester länge soll es im Folgenden gehen.

Der Secure String

Will man den Befehl New-Aduser ... -Accountpassword $Password ausführen, will die PowerShell die Variable $Password als Secure String übergeben bekommen.

Eine einfache Möglichkeit aus einem gewöhnlichen String $String einen Secure String $Secure zu erstellen ist folgender Befehl:

$Secure = $String | ConvertTo-SecureString -AsPlainText -Force

-AsPlainText gibt an, dass es sich um einen einfachen String handelt, -Force vermeidet unnötige Bestätigungsfragen der PowerShell

Der Zufall

Das Erzeugen eines zufälligen Strings erfolgt über das mehrfache, zufällige Ziehen aus einem char-Array. Erzeugen wir uns zunächst ein char-Array mit allen ASCII-Zeichen von 33 - 127 (Buchstaben, Zahlen und einige Sonderzeichen):

[char[]](33..127)

Der Befehl Get-Random zieht aus einem übergebenen Array zufällig einen Eintrag. Mit dem Parameter -Count kann man festlegen, wie oft gezogen werden soll.

Get-Random -Count 8 zieht also 8 mal.

Um nun ein zufälliges Passwort der Länge 8 zu erstellen, erzeugen wir uns zunächst 8 zufällige chars und konkatenieren diese über -join:

$String = (-join ([char[]](33..127)) | Get-Random -Count 8 )

Nun wandeln wir die Variable $String noch in einen Secure String um und schon haben wir das zufällige Passwort:

$Password = $String | ConvertTo-SecureString -AsPlainText -Force

[1] https://www.escde.net/blog/benutzerverwaltung-im-ad-uber-powershell-skripte?rq=Benutzerverwaltung%20im%20AD [2] https://www.escde.net/blog/benutzerverwaltung-per-powershell-mit-gui?rq=Benutzerverwaltung%20im%20AD