У нас есть несколько способов менять в Powershell пароль. Первый - это консольный ввод, а второй передавать как строку, которая потом будет конвертироваться. Так же рассмотрим простой генератор паролей в Powershell.
Первый вариант это указать пароля как он есть:
$password = ConvertTo-SecureString -String "Password121!" -AsPlainText -Force
Второй вариант - консольный т.е. мы должны будем его ввести после объявления переменной:
$password = Read-Host "Enter new password" -AsSecureString
Далее мы должны будем передать эти переменные в команду, которая сменит пароль. Вариант что бы сменить пароль пользователя AD в Powershell:
Set-ADAccountPassword -Identity grigoriev -NewPassword $password
И наверняка мы захотим, что бы после входа он должен был ввести новый пароль. Для пользователя grigoriev это будет так:
Set-ADUser -Identity "grigoriev" -ChangePasswordAtLogon $true
В этом случае мы сменим пароль локального администратора в Powershell:
Set-LocalUser -Name Administrator -Password $password
По аналогии с администратором мы можем задать пароль и у других локальных учетных записей.
Если пароль не будет соответствовать политикам сложности, то запросится заново или у нас может появится ошибка:
The password does not meet the length, complexity, or history requirement of the domain.
Эти команды мы можем использовать совместно с получением списка пользователей в Powershell.
Генератор паролей в Powershell
Самый простой вариант такой:
$random_num = Get-Random -Minimum 100 -Maximum 600
$gen_password = "Password!" + $random_num.ToString()
$password = ConvertTo-SecureString -String $gen_password -AsPlainText -Force
В этом случае к строке "Password!" будет присоединяться число от 100 до 600. Проблема в том, что в таком использовании, переменная будет иметь один и тот же пароль. Что бы этого избежать нам нужно либо завернуть в функцию либо использовать в цикле с другими параметрами.
Вариант с функцией такой:
function GenPassword
{ $random_string = "Passwd!" + (Get-Random -Minimum 100 -Maximum 600).ToString()
Write-Host $random_string
$random_password = ConvertTo-SecureString -String $random_passw -AsPlainText -Force
return $random_password}
Set-ADAccountPassword -Identity "Administrator" -NewPassword (GenPassword)
В этом случае, во время вызова генератора, он будет еще выводится на экран благодаря Write-Host.
Вариант посложнее - это заменить переменную $random_string на эту строчку:
$random_string = ([char[]]([char]33..[char]95) + ([char[]]([char]97..[char]126)) + 0..9 | sort {Get-Random})[0..8] -join ''
Но в таком случае, если это делается для простых пользователей, ввод будет очень сложным, пароли будут такими:
)C78^F?'2
'q8|)hw+e
Для подбора своих значений стоит вызвать объект в Powershell, например [char]33 и посмотреть что они значат, посмотреть диапазон в таблице ASCII и подобрать свой вариант.
Другой пример генератора на скриншоте:
...
Подписывайтесь на наш Telegram канал
Теги: #powershell