Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Ограничить количество цифр в генераторе паролей

Ответить
Настройки темы
PowerShell - Ограничить количество цифр в генераторе паролей

Старожил


Сообщения: 226
Благодарности: 20

Профиль | Отправить PM | Цитировать


Добрый день всем!
Есть отличная функция - генератор паролей, со всеми необходимыми настойками.
Описание от автора (ник iRon) :
PHP код: Выделить весь код

Параметр Size определяет длину пароля.

    
Параметр CharSets определяет сложность в которой символ U LN и S обозначает ПрописныеСтрочные буквыЦифры и СимволыЕсли указано в нижнем регистре n или s ) , возвращаемая строка может содержать любой символ в соответствующем наборе символовесли он указан в верхнем регистре N или S), возвращаемая строка будет содержать по крайней мере один из символов в соответствующем наборе символов.
    
Параметр Exclude позволяет исключить определенные символыкоторые могутнапример привести к путаниценапримербуквенно-цифровой O и числовой 0 (ноль).

Примеры:

Чтобы создать пароль длиной 8 символовкоторый может содержать любые прописныестрочные и цифры:

Create-Password 8 uln

Чтобы создать пароль длиной 12 символов
который содержит по крайней мере один символ верхнего регистраодин символ нижнего регистраодно число и один символ и не содержит символов OLIoli01:

Create-Password 12 ULNS "OLIoli01" 

Функция:
Код: Выделить весь код
Function MakeUp-String([Int]$Size = 8, [Char[]]$CharSets = "ULNS", [Char[]]$Exclude) {
    $Chars = @(); $TokenSet = @()
    If (!$TokenSets) {$Global:TokenSets = @{
        U = [Char[]]'ABCDEFGHIJKLMNOPQRSTUVWXYZ'                                #Upper case
        L = [Char[]]'abcdefghijklmnopqrstuvwxyz'                                #Lower case
        N = [Char[]]'0123456789'                                                #Numerals
        S = [Char[]]'!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~'                         #Symbols
    }}
    $CharSets | ForEach {
        $Tokens = $TokenSets."$_" | ForEach {If ($Exclude -cNotContains $_) {$_}}
        If ($Tokens) {
            $TokensSet += $Tokens
            If ($_ -cle [Char]"Z") {$Chars += $Tokens | Get-Random}             #Character sets defined in upper case are mandatory
        }
    }
    While ($Chars.Count -lt $Size) {$Chars += $TokensSet | Get-Random}
    ($Chars | Sort-Object {Get-Random}) -Join ""                                #Mix the (mandatory) characters and output string
}; Set-Alias Create-Password MakeUp-String -Description "Generate a random string (password)"
Всё устраивает отлично. Но хотелось бы как-то ограничить количество цифр в пароле. А ещё лучше установить их минимальное и максимальное количество.
Может кто подскажет, как правильно это прописать, в самой функции или при её вызове ?
Заранее благодарен за советы и подсказки!

Отправлено: 13:42, 30-06-2021

 

Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата Uragan66:
Есть отличная функция »
Похожая на велосипед. К чему это, когда есть штатные методы?
Код: Выделить весь код
Get-Help Get-Random
Код: Выделить весь код
$pass = (Get-Random (('a'..'z') + (0..9)) -Count 5)[0..4] -join ''
$pass
#Если до сих пор не pwsh:
$pass =  Get-Random ([char[]]('a'..'z') + (0..9)) -Count 5)[0..4] -join ''
$pass
Cоответственно выборку можно помножить на колличество элементов в "пароле", чтобы было возможно например "aaaaa"

Отправлено: 16:42, 30-06-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 226
Благодарности: 20

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
К чему это, когда есть штатные методы? »
Похожей функцией давно пользуюсь... Но, в функции MakeUp-String есть то, чего не хватает штатным методам. Например, исключение определённых символов из пароля.
Вот и хотелось бы добавить в неё ещё и возможность регулирования количества цифр.

Отправлено: 17:11, 30-06-2021 | #3


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата Uragan66:
исключение определённых символов из пароля. »
Ну так и берите только нужные символы:
Код: Выделить весь код
(get-random ((('a','b','c') + (0..9)) * 10) -Count 5) -join ''
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:43, 30-06-2021 | #4


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Uragan66, например:
Код: Выделить весь код
function Get-RandomPass {
  [CmdletBinding()]
  param(
    [Parameter()][Byte]$Length = 8, # немного сэкономим на памяти
    [Parameter()][ValidateSet('U', 'L', 'N', 'S')][Alias('c')]
    [Char[]]$CharSets = 'ULNS',
    [Parameter()][Byte]$NumLimit = 3
  )

  end {
    if ($NumLimit -ge $Length) {
      throw [InvalidOperationException]::new('Вне массива.')
    }

    $arr = [Linq.Enumerable]::SelectMany(
      [Object[]]@{U='A'..'Z';L='a'..'z';N=( # сразу ограничиваем количество цифр
          Get-Random ('0'..'9') -Count $NumLimit
        );S=('!'..'z').Where{$_ -notmatch '[0-9a-z]'}
      }[[String[]]$CharSets], [Func[Object, [Object[]]]]{$args[0]}
    ).ToArray()
    -join (Get-Random (( # просто перемешиваем полученный массив
      Get-Random $arr[0..($arr.Length - $NumLimit - 1)] -Count ($Length - $NumLimit)
    ) + $arr[($NumLimit * -1)..-1]) -Shuffle)
  }
}
Пример использования:
Код: Выделить весь код
Get-RandomPass -c lsn
Прочую мишуру навесите сами.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:28, 30-06-2021 | #5


Старожил


Сообщения: 226
Благодарности: 20

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Ну так и берите только нужные символы »
Foreigner, спасибо! Можно конечно и так... Но для генератора планируется GUI и, согласитесь, проще перечислить ненужные символы в пароле, чем прописывать все необходимые... Да и другие мелкие нюансы есть.
greg zakharov, спасибо, код хороший, но не получается запустить его ни на версии PS 5.1, на на 7.0.

Отправлено: 14:51, 02-07-2021 | #6


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата Uragan66:
не получается запустить его ни на версии PS 5.1, на на 7.0

В пятой же версии и не должно работать.

Отправлено: 18:12, 02-07-2021 | #7


Старожил


Сообщения: 226
Благодарности: 20

Профиль | Отправить PM | Цитировать


greg zakharov, но ведь я не виню Вас, в том, что у меня не запускается... Наоборот, спасибо, что подсказываете.
Но и на версии 7.0 у меня ошибка:


Отправлено: 19:43, 02-07-2021 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Ограничить количество цифр в генераторе паролей

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - поиск суммы и количество всех цифр в указанном файле Ellev Программирование и базы данных 1 18-06-2013 22:40
Разное - Ограничить количество обращений к жесткому диску DisPlayBoy Microsoft Windows 2000/XP 3 21-03-2013 18:49
Разное - Ограничить количество букв для мапа дисков RUVATA Microsoft Windows 2000/XP 3 30-10-2010 14:50
Система - Можно ли ограничить количество памяти выделяемой программе? multy Программное обеспечение Windows 0 08-09-2010 13:55
Как ограничить количество одновреммено качаемых файлов ? allalone Сетевые технологии 8 22-05-2004 03:12




 
Переход