Tipps

Zufällige (Komplexe) Kennwörter erzeugen mit Powershell

Update: Eine Version mit Hilfe des .NET-Frameworks finden Sie im Artikel Sichere Kennwörter in Powershell generieren, jetzt mit dem .NET Framework

Kennwörter braucht man in Skripten an allen Ecken und Enden, speziell dann, wenn man Benutzer erstellen möchten. Bei einer größeren Anzahl von Konten kann da ein Skript ganz hilfreich sein, dass zufällige Kennwörter generiert. Das ist mit Powershell relativ einfach gemacht. Alles, was man benötigt, ist eine Funktionalität zum Erstellen von Zufallswerten und die Möglichkeit, Zahlen in Buchstaben umzuwandeln. Das Cmdlet Get-Random liefert Zufallszahlen zurück:

Get-Random -Min 10 -Max 100

Die vollständige Auflistung der Funktionen Get-Random können Sie in der Powershell-Hilfe nachlesen. Für uns interessant ist der Parameter -Inputobject, über den man Get-Random ein Array mit Werten übergeben kann, aus denen der Zielwert gewählt wird. 

$ZufallsListe = 65..90
$Zufallszahl = Get-Random -InputObject $Zufallsliste

Die Zahlen 65-90 entsprechen den Ascii-Codes der Großbuchstaben von A-Z. Wir können die Zahlen in einen ASCII-Code umwandeln, indem wir Sie in ein CHAR[]-Array konvertieren. 

[CHAR[]]$Zufallszahl

Wenn man den Code in einer Schleife ausführt, bekommt man ein zufällig generiertes Kennwort:

$Length = 12
$Zufallsliste = 65..90
For ( $i = 0; $i -lt 12; $i++)
{
    $password += Get-Random -InputObject $Zufallsliste
}

Jetzt kann man noch weitere die Zahlenrepräsentationen für Kleinbuchstaben, Zahlen und Sonderzeichen hinzufügen und alles in eine Funktion packen, und man hat "New-Password":

function New-Password {
<#

[cmdletBinding()]
param
(
   # The Length of the Password
   [ValidateRange(3,256)]
   [int]$Length = 12,

   # The Criteria the Password must fullfill. Only Complex enforces the combination of
   # different Criteria.
   [ValidateSet('Complex','Numbers','Specials','LowerCaseLetters','UpperCaseLetters')]
   [String[]]$type = 'Complex'
)

# ASCII-Codes for different Types of Characters as Arrays
$Specials = ( 33..45 ) + ( 58..64 ) + ( 91..95 )
$Numbers = ( 48..57 )
$UpperCaseLetters = 65..90
$LowerCaseLetters = 97.. 122

# Generate the Array $Charset which contains the Characters from all chosen Criteria
Switch ( $Type )
{
   'Complex'          { $Charset = $UpperCaseLetters + $LowerCaseLetters + $Numbers + $Specials; break }
   'UpperCaseLetters' { $Charset += $UpperCaseLetters }
   'LowerCaseLetters' { $Charset += $LowerCaseLetters }
   'Numbers'          { $Charset += $Numbers }
   'Specials'         { $Charset += $Specials }
}
Write-Verbose "$Charset"

# Generate the password. The While-Loop ensures that Complex Passwords fullfill at least 3 Criteria.
While ((( $UpperInserted + $LowerInserted + $SpecialsInserted + $NumbersInserted -lt 3 ) -and ( $type -eq 'Complex' )) `
           -or (( $type -ne 'Complex' ) -and ( $UpperInserted + $LowerInserted + $SpecialsInserted + $NumbersInserted -lt 1 )))

{
   # Count-Variables are for reporting purposes
   # Inserted-Variables ensure that complex Passwords fullfill always at least 3 Criteria.
   # They are checked in the While-Condition.
   $UpperCount = 0
   $LowerCount = 0
   $SpecialsCount = 0
   $numbersCount = 0
   $UpperInserted = 0
   $LowerInserted = 0
   $SpecialsInserted = 0
   $NumbersInserted = 0
   [string]$Password = ''

   # Generating the Password
   For ( $i=1; $i -le $Length; $i++ )
   {
      $RandomChar = (Get-Random -InputObject $CharSet)
      Switch ( $RandomChar )
      {
         { $RandomChar -in $UpperCaseLetters } { $UpperCount++; $UpperInserted = 1 }
         { $RandomChar -in $LowerCaseLetters } { $LowerCount++; $LowerInserted = 1 }
         { $RandomChar -in $Specials } { $SpecialsCount++; $SpecialsInserted = 1 }
         { $RandomChar -in $Numbers } { $NumbersCount++; $NumbersInserted = 1 }
      }
      [string]$Password += [char[]]$RandomChar
   }
}

$Password
Write-Verbose "UpperCaseCount: $UpperCount"
Write-Verbose "LowerCaseCount: $LowerCount"
Write-Verbose "Specials: $SpecialsCount"
Write-Verbose "Numbers: $numbersCount"
}

Links

New-Password.txt


 146,    25  Apr  2017 ,   Tipp
Holger Voges

  E-Mail Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!

Holger Voges ist Inhaber der Firma Netz-Weise IT-Training und seit 1999 als Trainer und Consultant tätig. Als Allrounder in den Bereichen Windows Server, Active Directory, SQL Server, Hyper-V und Windows PowerShell, hat er in der Vergangenheit zahlreiche Einsätze als Consultant in namenhaften Firmen absolviert und so neben der Theorie auch umfangreiche praktische Erfahrungen gesammelt.

 

Schnellkontakt

bitte Ihre E-Mail eintragen

Netz-Weise

Das Haupt-Tätigkeitsfeld von Netz-Weise sind Schulungen für Profis. Bei uns bekommen Sie das Programm für den fortgeschrittenen Praktiker, der die Tiefen des Systems ausloten möchte genauso wie Standard-Schulungen.

So erreichen Sie uns:

Netz-Weise
IT-Training und Beratung
Freundallee 13a
30173 Hannover
 
Tel: (0511) 165 925-0
Fax: (0511) 165 925-99
email: info(at)netz-weise.de
 

Newsletter bestellen

Das Wichtigste kompakt ins E-Mailfach!