HOW-TO: Как написать собственный генератор паролей на PowerShell

Если тебе нужно сгенерировать много паролей или ты решил, что недостаточно доверяешь сторонним утилитам, то можешь взять за основу этот небольшой скрипт на PowerShell. Ты можешь доработать и модифицировать его по своему усмотрению — заодно поупражняешься в программировании на «пошике».

Собственно, вот код скрипта.

Write-Host("Программа для генерации паролей. Версия 0.1")
$Complexity = Read-Host ″Пароль со спецсимволами?″

if ($Complexity -eq "1"){
    $NonAlfaNumeric = Read-Host ″Количество нестандартных символов″
}

$PassLength = Read-Host ″Длина пароля (1-128)″
$PassNumber = Read-Host ″Количество паролей″
if ($Complexity -eq "1"){
    Add-Type -AssemblyName System.Web
    1..$PassNumber | ForEach-Object -process {
        [System.Web.Security.Membership]::GeneratePassword($PassLength,$NonAlfaNumeric)
    }
}else{
    1..$PassNumber | ForEach-Object -process {
        $PassResult = -join (1..$PassLength | % { [char[]]'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' | Get-Random })
        $PassResult
    }
}
Pause

Написан он практически на коленке, некоторые части я позаимствовал из других примеров. Но свою задачу скрипт выполняет.

Вкратце поясню, как он работает. Первым делом мы выбираем сложность пароля: спецсимволы не всегда разрешены в полях для ввода, поэтому добавим возможность отказаться от них. Ну и заодно спросим об их количестве — чем их больше, тем более стойким будет пароль, но тем сложнее его будет набирать вручную. Далее запрашиваем общую длину пароля и количество паролей, которое мы хотим получить на выходе.

Затем идет генерация пароля согласно выбранным параметрам. В случае паролей со спецсимволами используется встроенный командлет PowerShell под названием GeneratePassword. Во втором случае пароль генерируется из массива заранее заданных символов.

Подобный скрипт ты можешь использовать как отдельно, так и в составе более сложных сценариев. К примеру, если тебе понадобится создать сотню пользователей Active Directory, то ты сможешь вызывать его как функцию.

Комментарии (3)

  • Спасибо! Работает. Сохранил себе на флешку! У кого не работает запустите батник enableScript.bat с внутренним содержанием (powershell -Command Set-ExecutionPolicy RemoteSigned).

  • Не работает.

    + CategoryInfo : ParserError: (CloseBraceToken:TokenId) [], ParseException
    + FullyQualifiedErrorId : MissingEndCurlyBrace