Сброс пароля компьютера active directory

Обновлено: 06.07.2024

Управление Active Directory (AD) с помощью Windows PowerShell – это проще, чем Вы думаете, и я хочу доказать Вам это. Вы можете просто взять приведенные ниже скрипты и с их помощью решить ряд задач по управлению AD.

Требования

Чтобы использовать PowerShell для управления AD, нужно соблюсти несколько требований. Я собираюсь продемонстрировать, как командлеты для AD работают на примере компьютера на Windows 7.
Чтобы использовать командлеты, контроллер домена у Вас должен быть уровня Windows Server 2008 R2, или же Вы можете скачать и установить Active Directory Management Gateway Service на наследуемых контроллерах домена (legacy DCs). Внимательно прочитайте документацию перед установкой; требуется перезагрузка КД.
На стороне клиента, скачайте и установите Remote Server Administration Tools (RSAT) либо для Windows 7, либо для Windows 8. В Windows 7, Вам необходимо будет открыть в Панели управления (Control Panel) раздел Программы (Programs) и выбрать Включить или выключить функции Windows (Turn Windows Features On or Off). Найдите Remote Server Administration Tools и раскройте раздел Role Administration Tools. Выберите подходящие пункты для AD DS and AD LDS Tools, особенно обратите внимание на то, что должен быть выбран пункт Active Directory Module for Windows PowerShell, как показано на рисунке 1. (В Windows 8 все инструменты выбраны по умолчанию). Теперь мы готовы работать.



Рис.1 Включение AD DS и AD LDS Tools

Я вошел в систему под учетной записью с правами доменного администратора. Большинство командлетов, которые я буду показывать, позволят Вам уточнить альтернативные полномочия (credentials). В любом случае я рекомендую прочитать справку (Get-Help) и примеры, которые я буду демонстрировать ниже.
Начните сессию PowerShell и импортируйте модуль:

В результате импорта создается новый PSDrive, но мы не будем использовать его. Однако, Вы можете посмотреть, какие команды имеются в импортированном модуле.

Прелесть этих команд в том, что если я могу использовать команду для одного объекта AD, то ее можно использовать для 10, 100 и даже 1000. Посмотрим, как некоторые из этих командлетов работают.

Задача 1: Сброс пароля пользователя

Давайте начнем с типичной задачи: сброс пароля пользователя. Сделать это легко и просто можно через командлет Set-ADAccountPassword. Сложная часть заключается в том, что новый пароль должен быть уточнен как защищенная строка: фрагмент текста, который зашифрован и хранится в памяти на протяжении PowerShell сессии. Во-первых, создадим переменную с новым паролем:


Затем, введем новый пароль:

Теперь мы можем извлечь учетную запись (использование samAccountname – лучший вариант) и задать новый пароль. Вот пример для пользователя Jack Frost:

К сожалению, в случае с этим командлетом наблюдается баг: -Passthru, -Whatif, и –Confirm не работают. Если Вы предпочитаете короткий путь, попробуйте следующее:

В итоге мне необходимо, чтобы Jack сменил пароль при следующем входе в систему, и я модифицирую учетную запись используя Set-ADUser.

Результаты выполнения командлета не пишутся в консоль. Если это необходимо сделать, используйте –True. Но я могу узнать, успешно или нет прошла операция, произведя извлечения имени пользователя с помощью командлета Get-ADUser и уточнив свойство PasswordExpired, как показано на рисунке 2.



Рис. 2. Результаты работы командлета Get-ADUser Cmdlet со свойством PasswordExpired

Итог: сбросить пароль пользователя с помощью PowerShell совсем не сложно. Признаюсь, что сбросить пароль также просто через оснастку Active Directory Users and Computers консоли Microsoft Management Console (MMC). Но использование PowerShell подходит в том случае, если Вам необходимо делегировать задачу, Вы не хотите разворачивать вышеупомянутую оснастку или сбрасываете пароль в ходе большого автоматизированного ИТ-процесса.

Задача 2: Активировать и деактивировать учетные записи

А теперь давайте деактивируем учетную запись. Продолжим работать с Jack Frost. Этот код использует параметр –Whatif, который Вы можете встретить в других комадлетах, которые осуществляют изменения, чтобы проверить мою команду не запуская ее.

А теперь деактивируем по-настоящему:

А когда настанет время активировать учетную запись, какой командлет нам поможет?

Эти командлеты могут быть использованы в конвейерном выражении (pipelined expression), позволяя активировать или деактивировать столько учетных записей, сколько душе угодно. Например, этот код деактивирует все учетные записи в отделе продаж (Sales)

Конечно, писать фильтр для Get-ADUser довольно-таки сложно, но именно здесь использование параметра –Whatif вместе с командлетом Disable-ADAccount приходит на помощь.

Задача 3: Разблокировать учетную запись пользователя

Рассмотрим ситуацию, когда Jack заблокировал свою учетную запись, пытаясь ввести новый пароль. Вмест того, чтобы пытаться найти его учетную запись через GUI, процедуру разблокировки можно осуществить с помощью простой команды.

Командлет также поддерживает параметры -Whatif и -Confirm.

Задача 4: Удалить учетную запись

Неважно, сколько пользователей Вы удаляете, — это просто осуществить с помощью командлета Remove-ADUser. Мне не хочется удалять Jack Frost, но если бы я захотел, то использовал бы такой код:

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

С помощью этой команды будут найдены и удалены все деактивованные учетные записи подразделения (OU) Employees, которые не менялись в течение 180 и более дней.

Задача 5: Поиск пустых групп

Управление группами – занятие бесконечное и неблагодарное. Существует множество способов найти пустые группы. Некоторые выражения могут работать лучше, чем другие, в зависимости от Вашей организации. Код, приведенный ниже, позволит найти все группы в домене, включая встроенные (built-in).

Если у Вас есть группы с сотнями членов, тогда использование этой команды может занять много времени; Get-ADGroupMember проверяет каждую группу. Если Вы можете ограничить или настроить, это будет лучше.
Вот еще один подход:


Эта команда находит все универсальные группы (Universal groups), которые не имеют членство в OU Groups и выводит некоторые из свойств. Результат приведен на рисунке 3.

Рис. 3. Поиск и фильтрация универсальных групп

Задача 6: Добавление пользователей в группу

Давайте добавим Jack Frost в группу Chicago IT:

Да, все так просто. Вы можете также легко добавлять сотни пользователей в группы, хотя, на мой взгляд, это слегка неудобно:

Я использовал вводное конвейерное выражение (parenthetical pipelined expression), чтобы найти всех пользователей, у которых имеется свойство City в Chicago. Код в скобках выполняется, и полученные объекты передаются в параметр –Member. Каждый пользовательский объект добавляется в группу Chicago Employees. Неважно, имеем ли мы дело с 5 или 5000 пользователей, обновление членства в группах занимает всего несколько секунд. Это выражение может также быть написано с использованием ForEach-Object, что может быть удобнее:

Задача 7: Выводим список членов группы

Вы возможно захотите узнать, кто находится в определенной группе. Например, Вы должны периодически узнавать, кто входит в группу доменных администраторов (Domain Admins):

На рисунке 4 приведен результат.



Рис. 4. Члены группы Domain Admins

Командлет выводит объект AD для каждого члена группы. А что делать с вложенными группами? Моя группа Chicago All Users является коллекцией вложенных групп. Чтобы получить список всех учетных записей, я всего лишь должен использовать параметр –Recursive.

Если Вы хотите пойти другим путем – найти, в каких группах пользователь состоит, — используйте свойство пользователя MemberOf:

Я использовал параметр -ExpandProperty, чтобы вывести имена MemberOf как строки.

Задача 8: Найти устаревшие учетные записи компьютеров

Мне часто задают этот вопрос: “Как найти устаревшие учетные записи компьютеров?”. И я всегда отвечаю: “А что для вас является устаревшим?” Компании по-разному определяют то, когда учетная запись компьютера (или пользователя, неважно), признается устаревшей и не подлежит дальнейшему использованию. Что касается меня, то я обращаю внимание на те учетные записи, у которых пароли не менялись в течение определенного периода времени. Этот период для меня составляет 90 дней – если компьютер не сменил пароль вместе с доменом за этот период, скорее всего он находится оффлайн и является устаревшим. Используется командлет Get-ADComputer:

Фильтр замечательно работает с жестким значением, но этот код будет обновляться для всех учетных записей компьютеров, которые не изменили своих паролей с 1 января 2012 года. Результаты приведены на рисунке 5.



Рис. 5. Находим устаревшие учетные записи компьютеров

Другой вариант: предположим, вы хотя бы на функциональном уровне домена Windows 2003. Поставьте фильтр по свойству LastLogontimeStamp. Это значение – число 100 наносекундных интервалов с 1 января, 1601 года, и храниться в GMT, поэтому работа с этим значением слегка сложно:

Я взял на себя ответственность и добавил кастомное свойство, которое берет значение LastLogontimeStamp и конвертирует его в привычный формат. На рисунке 6 показан результат.



Рис. 6. Конвертируем значение LastLogonTimeStamp в привычный формат

Чтобы создать фильтр, мне необходимо конвертировать дату, например, 1 января 2012, в корректный формат. Конвертация осуществляется в FileTime:

Теперь я могу использовать эту переменную в фильтре для Get-ADComputer:

Приведённый код находит те же самые компьютеры, что были показаны на рисунке 5.

Задача 9: Деактивировать учетную запись компьютера

Возможно, когда Вы найдете неактивные или устаревшие учетные записи, Вы захотите деактировать их. Сделать это довольно просто. Мы будем использовать тот же командлет, что использовали в работе с учетными записями пользователей. Вы можете уточнить его, использовав samAccountname учетной записи.

Или же использовав конвейерное выражение:

Я также могу использовать мой код, чтобы найти устаревшие учетные записи и все их деактивировать:

Задача 10: Найти компьютеры по типу

Мне также часто задают вопрос, как найти учетные записи компьютеров по типу, например, серверы или рабочие станции. С вашей стороны это требует определенной креативности. В AD нет ничего такого, чтобы отличало сервер от клиента, разве что ОС. Если Ваш компьютер работает под Windows Server 2008, придется слегка сделать несколько дополнительных действий.
Для начала необходимо получить список ОС, а затем осуществляем фильтрацию учетных записей по имеющимся ОС.

Результаты показаны на рисунке 7.



Рис. 7. Извлечение списка ОС

Я хочу найти все компьютеры, на которых стоит серверная ОС:

Результаты приведены на рисунке 8.


Как и другими командлетами AD Get, Вы можете настроить поисковые параметры и ограничить запрос отдельными OU, если это необходимо. Все выражения, которые я показал, могут быть интегрированы в большие PowerShell выражения. Например, Вы можете сортировать, группировать, применять фильтры, экспортировать в CSV или создавать и отправлять на почту HTML отчеты – и все это из PowerShell! При этом Вам не придется писать ни единого скрипа.
Вот Вам бонус: отчет о возрасте пароля пользователя (user password-age report), сохраненный в HTML файле:

Хотя это выражение может выглядеть слегка пугающим, при минимальном знании PowerShell им легко воспользоваться. И остается лишь последний совет: как определить кастомное свойство под названием PasswordAge. Значение представляет собой промежуток между сегодняшним днем и свойством PasswordLastSet. Затем я сортирую результаты для моего нового свойства. На рисунке 9 показан выход для моего небольшого тестового домена.

Как и учетные записи пользователей, учетные записи компьютеров в домене имеют свой пароль. Пароль этот нужен для установления так называемых «доверительных отношений» между рабочей станцией и доменом. Пароли для компьютеров генерируются автоматически и также автоматически каждые 30 дней изменяются.

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-01

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-01

Для восстановления доверительных отношений существует несколько способов. Рассмотрим их все по порядку.

Открываем оснастку «Active Directory Users and Computers» и находим в ней нужный компьютер. Кликаем на нем правой клавишей мыши и в контекстном меню выбираем пункт «Reset Account». Затем заходим на компьютер под локальной учетной записью и заново вводим его в домен.

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-02

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-02

Примечание. Кое где встречаются рекомендации удалить компьютер из домена и заново завести. Это тоже работает, однако при этом компьютер получает новый SID и теряет членство в группах, что может привести к непредсказуемым последствиям.

Способ этот довольно громоздкий и небыстрый, т.к. требует перезагрузки, однако работает в 100% случаев.

Заходим на компьютер, которому требуется сбросить пароль, открываем командную консоль обязательно от имени администратора и вводим команду:

Netdom Resetpwd /Server:SRV1 /UserD:Administrator /PasswordD:*

где SRV1 — контролер домена, Administrator — административная учетная запись в домене. Дополнительно можно указать параметр /SecurePasswordPrompt, который указывает выводить запрос пароля в специальной форме.

В открывшемся окне вводим учетные данные пользователя и жмем OK. Пароль сброшен и теперь можно зайти на компьютер под доменной учетной записью. Перезагрузка при этом не требуется.

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-03

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-03

Что интересно, в рекомендациях по использованию и в справке написано, что команду Netdom Resetpwdможно использовать только для сброса пароля на контролере домена, другие варианты использования не поддерживаются. Однако это не так, и команда также успешно сбрасывает пароль на рядовых серверах и рабочих станциях.

Еще с помощью Netdom можно проверить наличие безопасного соединения с доменом:

Или сбросить учетную запись компьютера:

где WKS1 — рабочая станция, которой сбрасываем учетку.

еще пример для доменной учетки отличную названию Администратор.

C:\>netdom resetpwd /server:DC1 /userd:contoso\administrator
/passwordd:P@ssw0rd

Выходим из сессии локального администратора (logoff); Вуаля! Логинимся доменной учетной записью без всяких перезагрузок! Внимание! Ключ PasswordD пишется с ДВУМЯ буковками "D" на конце (что явно подчеркивает, что в команде имя пользователя и пароль указываются именно для ДОМЕННОГО администратора).

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-04

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-04

Способ достаточно быстрый и действенный, однако есть одно но: по умолчанию утилита Netdom есть только на серверах с установленной ролью Active Directory Domain Services (AD DS). На клиентских машинах она доступна как часть пакета удаленного администрирования Remote Server Administration Tools (RSAT).

Еще одна утилита командной строки — Nltest. На компьютере, который потерял доверие, выполняем следующие команды:

Nltest /query - проверить безопасное соединение с доменом;

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-05

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-05

Самый быстрый и доступный способ, ведь утилита Nltest по умолчанию есть на любой рабочей станции или сервере. Однако, в отличие от Netdom, в которой предусмотрен ввод учетных данных, Nltest работает в контексте запустившего ее пользователя. Соответственно, зайдя на компьютер под локальной учетной записью и попытавшись выполнить команду можем получить ошибку доступа.

PowerShell тоже умеет сбрасывать пароль компьютера и восстанавливать безопасное соединение с доменом. Для этого существует командлет Test-ComputerSecureChannel . Запущенный без параметров он выдаст состояние защищенного канала — True или False.

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

Test-ComputerSecureChannel -Server SRV1 -Credential Contoso\Administrator -Repair

где SRV1 — контролер домена (указывать не обязательно).

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-06

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-06

Для сброса пароля также можно также воспользоваться такой командой:

Reset-ComputerMachinePassword -Server SRV1 -Credential Contoso\Administrator -Repair

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-07

Как сбросить пароль учетной записи компьютера и восстановить доверие в Active directory-07

Способ быстрый и удобный, не требующий перезагрузки. Но и здесь есть свои особенности. Ключ -Credential впервые появился в PowerShell 3.0. Без этого параметра командлет, запущенный из под локального пользователя, выдает ошибку доступа.

В этой статье предоставляется решение ошибки, которая возникает при сбросе пароля пользователя.

Применяется к: Windows Server 2012 R2
Исходный номер КБ: 2001522

Симптомы

Windows не удается выполнить изменение пароля, так <user name> как:
Система не может найти указанный путь

После этого пароль пользователя не меняется. Эта же задача может работать с другими учетными записями пользователей администратора, а также для тех же учетных записей администратора на других рабочих станциях. Сброс пароля пользователя может также работать с помощью других средств, например с помощью LDIFDE, как описано в описании Как установить пароль пользователя с Ldifde.

Причина

Функция обработера диалогов шифрует новые строки паролей, когда она извлекет их из элементов управления редактированием. Шифрование не удается, так как оно не находит вспомогательные файлы в папке appData пользователя в следующем расположении:
%AppData% \ Microsoft \ Protect\<user sid>

Это может произойти, если папка пользовательской оболочки AppData перенаправляется в другое расположение без перемещения и копирования исходных данных. Расположение папки указывается в значении реестра AppData в следующем расположении реестра:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

Решение

Чтобы устранить проблему, переместите или скопируйте исходные данные в перенаправленное расположение или перенаправление папки AppData.

С помощью средства Process Monitor можно увидеть, что LSASS.EXE процесс не сможет открыть файлы на пути AppData после подтверждения нового диалогового пароля. Дополнительные сведения о инструменте Process Monitor можно получить на следующем веб-сайте Microsoft:
Монитор процесса v3.60

Дополнительная информация

Корпорация Майкрософт рекомендует использовать политики перенаправления папок для перенаправления частей профиля пользователя в различные расположения. Эти политики также позволяют автоматически перемещать содержимое папки.

Сброс пароля пользователя

Чтобы открыть оснастку «Active Directory - пользователи и компьютеры», нажмите кнопку Пуск, выберите Панель управления, дважды щелкните Администрирование, а затем дважды щелкните Active Directory - пользователи и компьютеры.

В дереве консоли щелкните пункт Пользователи.

Местонахождение

    Active Directory - пользователи и компьютеры\domain node\Пользователи

Или щелкните папку, которая содержит нужную учетную запись пользователя.

В области сведений щелкните правой кнопкой мыши имя пользователя, пароль которого следует переустановить, а затем выберите команду Смена пароля.

Введите пароль и затем подтвердите его.

Если необходимо, чтобы пользователь изменил этот пароль при следующем входе в систему, установите флажок Требовать смену пароля при следующем входе в систему.

Дополнительная информация

  • Для выполнения этой процедуры необходимо быть членом группы «Операторы учета», «Администраторы домена» или «Администраторы предприятия» в доменных службах Active Directory либо должны быть делегированы соответствующие полномочия. По соображениям безопасности для выполнения этой процедуры рекомендуется использовать команду Запуск от имени.

Дополнительные источники информации

Чтобы открыть командную строку, нажмите кнопку Пуск, выберите пункт Выполнить, введите cmd, а затем нажмите кнопку ОК.

Введите указанную ниже команду и нажмите клавишу ВВОД.

Задает различаемое имя пользователя, пароль которого будет переустановлен.

Задает пароль, который заменит текущий пароль пользователя.

Задает флаг pwdExpired.

Задает значение флага pwdExpired.

Для просмотра полного синтаксиса данной команды и сведений о вводе в командную строку информации учетной записи пользователя введите следующую команду, а затем нажмите клавишу ВВОД.

Дополнительная информация

  • Для выполнения этой процедуры необходимо быть членом группы «Операторы учета», «Администраторы домена» или «Администраторы предприятия» в доменных службах Active Directory либо получить соответствующие полномочия путем делегирования. По соображениям безопасности для выполнения этой процедуры рекомендуется использовать команду Запуск от имени.

Читайте также: