Вопрос или проблема
Либо в cmd, либо в PowerShell, я запутался в том, как позволить локальным пользователям со стандартными учетными записями менять свои пароли с помощью скрипта, аналогично нажатию ctrl-alt-delete -> смена пароля… где пользователи получают запрос на ввод текущего пароля, а затем ввод и подтверждение нового пароля.
Я пробовал ‘net user’ и set-localuser, но безуспешно. Оба дают ошибку “Доступ запрещен”.
Можно ли сделать так, чтобы пользователи без прав администратора могли менять свои пароли локально или удаленно с помощью скрипта?
Спасибо.
Вам нужно использовать NetAPI32.NetUserChangePassword
из Win32 API.
Раньше я использовал passwd.exe
с 1997 года, но не уверен, что вы можете скачать его где-либо сейчас.
Похоже, что я писал PowerShell скрипт какое-то время назад, который делает то же самое.
Он находится на GitHub: https://github.com/hahndorf/hacops/blob/master/Set-Password.ps1
Либо используйте:
Set-Password.ps1
и заполните запросы, или
Set-Password.ps1 -userName "Peter" -oldPassword "foo" -NewPassword "bar"
Ответ или решение
Конечно! Изменение пароля локальных учетных записей пользователей без прав администратора может быть достигнуто с помощью PowerShell, используя соответствующий скрипт. Вот пошаговое руководство для реализации данной задачи.
Решение для изменения пароля локального пользователя с помощью PowerShell
-
Создание PowerShell скрипта:
Мы можем написать скрипт для изменения пароля учетной записи пользователя. В этом скрипте пользователь будет вводить текущее и новое пароли.param ( [string]$userName, [string]$oldPassword, [string]$newPassword ) # Проверка на недопустимые символы в новом пароле (если необходимо) if ($newPassword -notmatch '^[\w\d!@#$%^&*()_+=-]*$') { Write-Host "Пароль должен содержать только допустимые символы." exit } # Получение текущего пользователя и проверка пароля try { $currentCredential = New-Object System.Management.Automation.PSCredential ($userName, (ConvertTo-SecureString $oldPassword -AsPlainText -Force)) $null = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($currentCredential.Password) } catch { Write-Host "Неверный текущий пароль." exit } # Изменение пароля try { $user = [ADSI]"WinNT://./$userName,user" $user.ChangePassword($oldPassword, $newPassword) Write-Host "Пароль успешно изменён." } catch { Write-Host "Не удалось изменить пароль: $_" }
-
Запуск скрипта:
Сохраните скрипт в файл с расширением.ps1
, например,ChangePassword.ps1
. -
Использование скрипта:
Для выполнения скрипта откройте PowerShell и используйте следующую команду:.\ChangePassword.ps1 -userName "ВашеИмяПользователя" -oldPassword "ТекущийПароль" -newPassword "НовыйПароль"
Ограничения
- Пользователь должен знать свой текущий пароль для его изменения.
- Убедитесь, что у вас достаточно прав для выполнения скрипта.
- Этот метод не предусмотрен для удаленного доступа к учетным записям, если только не используется соответствующее средство управления.
Альтернативный подход
Если вы не хотите использовать кастомный скрипт, ваш вариант — это использование графического интерфейса для изменения пароля в Windows (Ctrl+Alt+Delete -> Изменение пароля), который прекрасно справляется с этой задачей. Однако, если вам необходимо автоматизировать процесс, вышеуказанный скрипт станет хорошей альтернативой.
Если у вас есть другие вопросы или требуется дополнительная помощь, не стесняйтесь спрашивать!