Изменение пароля локальной учетной записи пользователя Windows без прав администратора через скрипт

Вопрос или проблема

Либо в 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

  1. Создание 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 "Не удалось изменить пароль: $_"
    }
  2. Запуск скрипта:
    Сохраните скрипт в файл с расширением .ps1, например, ChangePassword.ps1.

  3. Использование скрипта:
    Для выполнения скрипта откройте PowerShell и используйте следующую команду:

    .\ChangePassword.ps1 -userName "ВашеИмяПользователя" -oldPassword "ТекущийПароль" -newPassword "НовыйПароль"

Ограничения

  • Пользователь должен знать свой текущий пароль для его изменения.
  • Убедитесь, что у вас достаточно прав для выполнения скрипта.
  • Этот метод не предусмотрен для удаленного доступа к учетным записям, если только не используется соответствующее средство управления.

Альтернативный подход

Если вы не хотите использовать кастомный скрипт, ваш вариант — это использование графического интерфейса для изменения пароля в Windows (Ctrl+Alt+Delete -> Изменение пароля), который прекрасно справляется с этой задачей. Однако, если вам необходимо автоматизировать процесс, вышеуказанный скрипт станет хорошей альтернативой.

Если у вас есть другие вопросы или требуется дополнительная помощь, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...