Как в Powershell сменить пароль локального пользователя и AD


07 августа 2019


Как сменить пароль в Powershell пользователя AD и локального

У нас есть несколько способов менять в 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

По аналогии с администратором мы можем задать пароль и у других локальных учетных записей.

Смена пароль powershell

Если пароль не будет соответствовать политикам сложности, то запросится заново или у нас может появится ошибка:

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 и подобрать свой вариант.

Другой пример генератора на скриншоте:

Powershell генератор паролей

 

...

Теги: #powershell


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.