generiere-Zufallspasswort (PowerShell-Funktion)

Heute stelle ich meine Passwortgeneratorfunktion vor. Diese habe ich mit der PowerShell geschrieben. Sie liegt in einem PSModule, dass automatisch mit geladen wird. Dadurch steht die Funktion immer zur Verfügung.

Der ScriptCode


function generiere-Zufallspasswort {
    

    .PARAMETER KeineZahlen
        Unterdrückt Zahlen im Passwort. Standardmäßig werden alle Ziffern verwendet.

    .PARAMETER KeineKleinbuchstaben
        Unterdrückt kleine Buchstaben im Passwort. Standardmäßig werden alle Buchstaben verwendet.

    .PARAMETER KeineGrossbuchstaben
        Unterdrückt große Buchstaben im Passwort. Standardmäßig werden alle Buchstaben verwendet.

    #>
    [outputtype([string])]
    param(
        [parameter(Mandatory=$false)] [validateRange(5,150)]    [int]    $AnzahlZeichen        = 20,
        [parameter(Mandatory=$false,ParameterSetName="show")]   [switch] $PasswortAnzeigen     = $false,
        [parameter(Mandatory=$false)]                           [switch] $AlsSecureString      = $false,
        [parameter(Mandatory=$false)]                           [switch] $KeineSonderzeichen   = $false,     
        [parameter(Mandatory=$false)]                           [switch] $KeineZahlen          = $false,
        [parameter(Mandatory=$false)]                           [switch] $KeineKleinbuchstaben = $false,
        [parameter(Mandatory=$false)]                           [switch] $KeineGrossbuchstaben = $false
    ) 

    # definiere Zeichensatz
        $Zeichen = @()
        if ($KeineGrossbuchstaben -eq $false) { $Zeichen += 65..90  | ForEach-Object {[char] $_} }
        if ($KeineKleinbuchstaben -eq $false) { $Zeichen += 97..122 | ForEach-Object {[char] $_} }
        if ($KeineZahlen          -eq $false) { $Zeichen += 0..9    | ForEach-Object { $_ }      }
        if ($KeineSonderzeichen   -eq $false) { '!"§$%&/()=?*+#.,-_;:' -split '' | ForEach-Object { $Zeichen += $_ } }

        if ($Zeichen.count -eq 0) {
            Write-Host "Der Zeichensatz darf nicht leer sein!" -ForegroundColor Magenta
            break
        }

    # stelle Passwort zusammen
        $PWD = (1..$AnzahlZeichen | ForEach-Object { Get-Random -InputObject $Zeichen -Count 1 }) -join ''
    
    # berechne Entropie
        $Entropy = [math]::Log($Zeichen.count,2) * $AnzahlZeichen
        $Entropy = [math]::Round( $Entropy , 0 )

    # Ausgabe
        if ($PasswortAnzeigen) {
            Return $PWD

            Write-Host "" -ForegroundColor Cyan        
            Write-Host "Qualität: $Entropy Bits"          -ForegroundColor Cyan
            Write-Host "Länge:    $AnzahlZeichen Zeichen" -ForegroundColor Cyan

        } 
        
        if ($AlsSecureString) {
            Return (ConvertTo-SecureString -String $PWD -AsPlainText -Force)

        } 
        
        if ($PasswortAnzeigen -eq $false -and $AlsSecureString -eq $false) {
            Set-Clipboard -Value $PWD

            Write-Host "Das Passwort wurde in die Zwischenablage kopiert." -ForegroundColor Cyan
            Write-Host "Qualität: $Entropy Bits"                           -ForegroundColor Cyan
            Write-Host "Länge:    $AnzahlZeichen Zeichen"                  -ForegroundColor Cyan
            Write-Host ""
            Write-Host "Die Zwischenablage wird in 10 Sekunden geleert "   -ForegroundColor Yellow -NoNewline

            1..10 | ForEach-Object {
                Write-Host "." -ForegroundColor Yellow -NoNewline
                Start-Sleep -Seconds 1
            }
            $null | clip.exe
            Write-Host " erledigt." -ForegroundColor Yellow            
        }        
}

Aufrufe

Der einfachste Aufruf kommt ohne Parameter aus. Es werden dadurch die Standardeinstellungen verwendet. Das neue Passwort wird aus dem kompletten Zeichensatz generiert und für 10 Sekunden in der Zwischenablage gespeichert. Danach wird es aus der Zwischenablage entfernt:

generiere-Zufallspasswort (PowerShell-Funktion)

Alternativ kann die Länge des Passwortes mit einem Parameter angegeben werden:

generiere-Zufallspasswort (PowerShell-Funktion)

Mit den frei kombinierbaren Parametern -KeineSonderzeichen, -KeineZahlen, -KeineKleinbuchstaben und-Keinegrossbuchstaben kann der Zeichensatz angepasst werden

generiere-Zufallspasswort (PowerShell-Funktion)

Anstelle der Zwischenablage kann auch das neue Passwort auch direkt angezeigt werden. Hierbei besteht aber durchaus das Risiko einer Protokollierung durch ein PS-Transcript!

generiere-Zufallspasswort (PowerShell-Funktion)

Und wenn das Passwort etwas besser gesichert transportiert werden soll, dann steht auch die integrierte Konvertierung in einen SecureString zur Verfügung. Den Weg zum Klartextpasswort hab ich mal mit dazugeschrieben:

generiere-Zufallspasswort (PowerShell-Funktion)

Vielleicht könnt ihr diese Funktion gebrauchen. Dann viel Spass damit!
Stay tuned!

Kommentar hinterlassen