Powershell смена пароля пользователя: Смена пароля пользователя в AD из PowerShell
Смена пароля пользователя в AD из PowerShell
В этой статье мы рассмотрим, как изменить (сбросить) пароль одного или сразу нескольких пользователей Active Directory из командной строки PowerShell с помощью командлета Set-ADAccountPassword.
Большинство администраторов привыкли выполнять смену (сброс) паролей пользователей в AD через графическую оснастку dsa.msc (Active Directory Users & Computers — ADUC). Для этого нужно найти учетную запись пользователя в AD щелкнуть по нему правой кнопкой и выбрать пункт «Смена пароля» (Reset password). Это простой и понятный способ.
Но вам не удастся использовать консоль ADUC, когда необходимо сбросить пароль сразу множеству пользователей, использовать процедуру сброса пароля в качестве одного из действий скрипта. В этом случае можно сбросить пароли в AD из командной строки PowerShell.
- Как сбросить пароль пользователю в AD?
- Изменить пароль нескольких пользователей в AD
Как сбросить пароль пользователю в AD?
Для сброса пароля пользователя в AD используется командлет Set-ADAccountPassword, входящий в модуль Active Directory для Windows PowerShell (в десктопых версиях Windows он входит в состав RSAT, а в серверных редакциях устанавливается в виде отдельного компонента AD DS Snap-Ins and Command-Line Tools). Перед использованием модуля его необходимо импортировать в сессию PowerShell:
Import-module ActiveDirectory
Для сброса пароля ваша учетной запись должна обладать соответствующими правами. Естественно, обычные пользователи AD по-умолчанию не могут сбросить пароль других аккаунтов, чтобы эта возможность появилась, пользователю (группе пользователей) нужно делегировать право на сброс пароля на контейнер AD, либо добавить его в доменную группу Account Operators.
Чтобы проверить, что у вашей учетной записи есть право на сброс пароля определенного пользователя, откройте его свойства, перейдите на вкладку Security -> Advanced -> Effective Access -> укажите имя своей учетной записи -> убедитесь, что у вас есть разрешение Reset Password.
Чтобы сбросить пароль для пользователя с учетной записью dakimov и установить новый пароль SuperStr0n@p1, выполните команду:
Set-ADAccountPassword dakimov -Reset -NewPassword (ConvertTo-SecureString -AsPlainText “SuperStr0n@p1” -Force -Verbose) –PassThru
По умолчанию командлет возвращает объект и ничего не отображает в консоли. Чтобы вывести информацию об объекте пользователя в AD мы используем параметр –PassThru.
В качестве имени пользователя можно указать sAMAccountName (как в нашем случае), objectGUID, SID пользователя, или его DN (Distinguished Name, например CN=Akimov,OU-Users,DC=winitpro,DC=ru).
Если при смене пароля пользователя не указывать параметр –Reset, необходимо указать старый и новый пароль учетной записи.
Примечание. Если при сбросе пароля с помощью командлета Set-ADAccountPassword появляется ошибка:
Set-ADAccountPassword : The password does not meet the length, complexity, or history requirement of the domain.
Это означает что к указанному паролю применяются некоторые требования сложности, длины и т.д., определенные в доменной политике паролей или гранулированной политике паролей, действующей на учетку.
Если у вас включено ведение истории PowerShell команд, и вы не хотите, чтобы пароли в открытом виде отображались в консоли PoSh, пароль как и при создании пользователя нужно преобразовать в безопасную строку (подробнее о защите паролей в скриптах PowerShell здесь):
$NewPasswd=Read-Host "Введите новый пароль пользователя" –AsSecureString
Теперь сбросим пароль:
Set-ADAccountPassword dakimov -Reset –NewPassword $NewPasswd –PassThru
При сбросе пароля можно принудительно снять блокировку ученой записи, даже если она заблокирована (как найти с какого компьютера блокируется учетная запись, смотрите в статье Поиск источника блокировки пользователя в Active Directory):
Unlock-ADAccount –Identity dakimov
Чтобы пользователь при следующем входе в домен сменил данный пароль на новый, нужно изменить его свойства в AD, выполнив команду:
Set-ADUser -Identity dakimov -ChangePasswordAtLogon $true
Вы можете совместить в одной строке команду смены пароля и включение требования сменить пароль (атрибут userAccountControl):
Set-ADAccountPassword dakimov -NewPassword $NewPasswd -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $True
С помощью командлета Get-ADUser вы можете убедиться, что пароль сброшен успешно, выведя время последней смены пароля аккаунта:
Get-ADUser dakimov -Properties * | select name, pass*
При сбросе пароля на контроллере домена (DC) регистрируется событие EventID 4724. Это событие помогает определить учетную запись, которая выполнила сброс пароля пользователя.
Изменить пароль нескольких пользователей в AD
Выше мы показали, как из PowerShell сбросить пароль одного пользователя в AD. Рассмотрим теперь другой сценарий – когда вам нужно сменить пароли сразу нескольких пользователей.
Самый простой случай – вам нужно сбросить пароли всех пользователей с определенными свойствами учеток. Например, нужно заставить сбросить пароль всем сотрудникам департамента Sales на одинаковый и заставить его сменить при следующем входе:
get-aduser -filter "department -eq 'Sales Dept' -AND enabled -eq 'True'" | Set-ADAccountPassword -NewPassword $NewPasswd -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $True
Рассмотрим другой случай. Допустим, у вас имеется CSV / Excel файл, в котором содержится список пользователей, которым нужно сбросить пароли и уникальный пароль для каждого пользователя. Формат файла users.csv:
sAMAccountName;NewPassword
aivanov;PaSSde0r1
bpetrov;New$isde01
ssidorov;k@nndj!223
С помощью следующего PowerShell скрипта можно сбросить пароль для каждой учетной записи из файла:
Import-Csv users.csv -Delimiter ";" | Foreach {
$NewPass = ConvertTo-SecureString -AsPlainText $_.NewPassword -Force
Set-ADAccountPassword -Identity $_.sAMAccountName -NewPassword $NewPass -Reset -PassThru | Set-ADUser -ChangePasswordAtLogon $false
}
После выполнения даннго кода всем пользователям в файле будет установлен новый уникальный пароль.
Как сбросить пароль локального и доменного пользователя с помощью PowerShell?
Администратор может изменить пароль локальных пользователей компьютера с помощью графической оснастки lusrmgr.msc. Чтобы изменить пароль доменного пользователя преимущественно используется графическая консоль Active Directory Users and Computer (ADUC). В некоторых случаях администратору бывает необходимо изменить пароль пользователя из командной строки или скрипта. В этой статье мы покажем, как управлять паролями локальных и доменных (из домена Active Directory) пользователей с помощью PowerShell.
- Как изменить пароль пользователя AD с помощью PowerShell?
- Как из PowerShell изменить пароль локального пользователя Windows?
Содержание:
Как изменить пароль пользователя AD с помощью PowerShell?
Чтобы сбросить пароль пользователя в AD нужно использовать комадлет Set-ADAccountPassword из модуля PowerShell Active Directory. Естественно у пользователя, который выполняет команду должны быть права администратора домена или ему делегированы полномочия на сброс паролей пользователям AD.
Перед использованием командлета Set-ADAccountPassword необходимо импортировать данный модуль в сессию PowerShell:
import-module activedirectory
Пароль в памяти компьютера желательно хранить в защищенном виде, поэтому можно попросить администратора указать пароль следующим образом:
$newPass=Read-Host "Введите новый пароль" -AsSecureString
Введите новый пароль в консоли.
Лучше всего указывать имя учетной записи в виде samAccountname. Например, чтобы изменить пароль пользователю aaivanov, выполните команду:
Set-ADAccountPassword aaivanov -NewPassword $newPass
Можно задать новый пароль пользователя прямо в коде скрипта (в открытом виде):
Set-ADAccountPassword aaivanov –NewPassword (ConvertTo-SecureString -AsPlainText –String "Hard6P@ss " -force)
Если нужно, чтобы пользователь сам сменил пароль при следующей авторизации на любом компьютере домена, выполните команду:
Set-ADUser aaivanov -ChangePasswordAtLogon $True
Вы можете сбросить пароль сразу нескольким пользователям. Можно сохранить список учетных записей в обычном текстовом файле sbros_parolya_spisok_users.txt (каждая строка – одна учтенная запись). Воспользуйтесь таким скриптом:
Get-Content C:\PS\sbros_parolya_spisok_users.txt | Set-ADAccountPassword -NewPassword $newPass -Reset
Как из PowerShell изменить пароль локального пользователя Windows?
Для сброса паролей на локальные учтенные записи в Windows можно использовать API ADSI (Active Directory Services Interface), который может применяться как для работы с Active Directory, так и с отдельно стоящими компьютерами.
Откройте командную строку PowerShell и выведите список всех локальных пользователей компьютера:
get-wmiobject win32_useraccount
Также вы можете вывести список локальных пользователей так:
[adsi]$localPC = "WinNT://."
$localPC.Children | where {$_.Class -eq "user"} | ft name, description –auto
Чтобы сбросить пароль локального пользователя, выберите пользователя (например, учетка root):
[adsi]$user = "WinNT://./root,user"
Установите его пароль:
$user.SetPassword("et0sloshn!yP@r0l")
Дополнительно можете потребовать от пользователя самому сменить пароль при следующем входе в систему:
Задаем смену пароля при следующем входе:
$user.Put("PasswordExpired",1)
Осталось сохранить изменения в учетной записи пользователя:
$user.SetInfo()
Эти же команды можно использовать для смены пароля пользователя на удаленных компьютерах. Достаточно заменить [adsi]$user = ″WinNT://./root,user″
на команду вида [adsi]$user = ″WinNT://msk-BuhPC21/local_user_name,user″
Чтобы задать одинаковый пароль для всех локальных пользователей, используйте следующий скрипт:
$NewPass = "NoviyP@r0l"
$localusers = Get-WmiObject -Class Win32_UserAccount -ComputerName $env:COMPUTERNAME -Filter LocalAccount='true' | select -ExpandProperty name
foreach ($user in $localusers)
{
$user
([adsi]"WinNT://$env:COMPUTERNAME/$user").SetPassword("$NewPassW0rd")
}
Изменение пароля локального пользователя и Active Directory с помощью PowerShell — Information Security Squad
Администратор может изменить пароль локальных пользователей на компьютере, используя графическую оснастку «Локальные пользователи и группы (lusrmgr.msc)».
Чтобы изменить пароль пользователя домена AD, в основном используется консоль GUI для пользователей и компьютеров Active Directory (ADUC).
Однако в некоторых случаях администратору может потребоваться изменить пароль пользователя из командной строки или в каком-либо скрипте.
В этой статье мы покажем, как управлять паролями пользователей (как локальными, так и доменными) с помощью PowerShell.
Как изменить пароль пользователя Active Directory с помощью PowerShell?
Чтобы изменить пароль пользователя Active Directory, используйте команду Set-ADAccountPassword из модуля Active Directory для Windows PowerShell.
Конечно, пользователь, выполняющий командлет, должен иметь права администратора домена или должен быть делегирован для сброса паролей пользователей AD.
Перед использованием командлета Set-ADAccountPassword вы должны импортировать этот модуль в сеанс PowerShell:
Import-Module ActiveDirectory
Пароль в памяти компьютера желательно хранить в защищенной форме, поэтому вы можете попросить администратора указать пароль следующим образом:
$newPass=Read-Host "Enter the new user password" -AsSecureString
Введите новый пароль в консоли PowerShell.
Лучше указать имя учетной записи AD в виде имени samAccountname. Например, чтобы изменить пароль для пользователя jkelly, запустите команду:
Set-ADAccountPassword jkelly -NewPassword $newPass
Вы можете установить новый пароль пользователя непосредственно внутри кода скрипта:
Set-ADAccountPassword jkelly–NewPassword (ConvertTo-SecureString -AsPlainText –String "St0ngPwd@d" -force)
Если вы хотите, чтобы пользователь изменил пароль при следующем входе в систему, выполните команду:
Set-ADUser jkelly -ChangePasswordAtLogon $True
Вы можете сбросить пароль для нескольких пользователей одновременно (предположим, что имена учетных записей хранятся в текстовом файле user_to_reset.txt).
Используйте этот скрипт:
Get-Content C:\PS\user_to_reset.txt | Set-ADAccountPassword -NewPassword $newPass -Reset
Как изменить пароль для локальных учетных записей Windows?
Чтобы изменить пароли локальных пользователей Windows, вы можете использовать API интерфейса ADSI (Active Directory Services Interface), который может использоваться для взаимодействия с Active Directory или с автономными компьютерами.
Откройте командную строку PowerShell и перечислите локальные учетные записи пользователей на текущем компьютере:
get-wmiobject win32_useraccount
Вы также можете отобразить список локальных пользователей, например:
[adsi]$localPC = "WinNT://." $localPC.Children | where {$_.Class -eq "user"} | ft name, description –auto
Чтобы сбросить пароль локального пользователя, сначала выберите пользователя (в этом примере имя локальной учетной записи — ConfRoom):
[adsi]$user = "WinNT://./ConfRoom,user"
Задайте пароль:
$user.SetPassword("newP@s32w02rd")
Кроме того, вы можете запросить смену пароля при следующем входе в систему:
$user.Put("PasswordExpired",1)
Осталось сохранить изменения в учетной записи пользователя:
$user.SetInfo()
Эти же команды могут использоваться для изменения пароля пользователя на удаленных компьютерах.
Достаточно заменить [adsi] $ user = «WinNT: //./ConfRoom,user» командой [adsi] $ user = «WinNT: // RemotePCName / ConfRoom, user».
Чтобы установить одинаковый пароль для всех локальных пользователей, используйте следующий скрипт:
$NewPass = "ThisIsNewP@33" $localusers = Get-WmiObject -Class Win32_UserAccount -ComputerName $env:COMPUTERNAME -Filter LocalAccount='true' | select -ExpandProperty name foreach ($user in $localusers) { $user ([adsi]"WinNT://$env:COMPUTERNAME/$user").SetPassword("$NewPass ") }
Изменение пароля локального пользователя и Active Directory с помощью PowerShell — Information Security Squad
Администратор может изменить пароль локальных пользователей на компьютере, используя графическую оснастку «Локальные пользователи и группы (lusrmgr.msc)».
Чтобы изменить пароль пользователя домена AD, в основном используется консоль GUI для пользователей и компьютеров Active Directory (ADUC).
Однако в некоторых случаях администратору может потребоваться изменить пароль пользователя из командной строки или в каком-либо скрипте. В этой статье мы покажем, как управлять паролями пользователей (как локальными, так и доменными) с помощью PowerShell.
Как изменить пароль пользователя Active Directory с помощью PowerShell?
Чтобы изменить пароль пользователя Active Directory, используйте командлет Set-ADAccountPassword из модуля Active Directory для Windows PowerShell.
Конечно, пользователь, выполняющий командлет, должен иметь права администратора домена или должен быть делегирован для сброса паролей пользователей AD.
Перед использованием командлета Set-ADAccountPassword вы должны импортировать этот модуль в сеанс PowerShell:
Import-Module ActiveDirectory
Пароль в памяти компьютера желательно хранить в защищенной форме, поэтому вы можете попросить администратора указать пароль следующим образом:
$newPass=Read-Host "Enter the new user password" -AsSecureString
Введите новый пароль в консоли PowerShell.
Лучше указать имя учетной записи AD в виде имени samAccountname.
Например, чтобы изменить пароль для пользователя jkelly, запустите команду:
Set-ADAccountPassword jkelly -NewPassword $newPass
Вы можете установить новый пароль пользователя непосредственно внутри кода скрипта:
Set-ADAccountPassword jkelly–NewPassword (ConvertTo-SecureString -AsPlainText –String "St0ngPwd@d" -force)
Если вы хотите, чтобы пользователь изменил пароль при следующем входе в систему, выполните команду:
Set-ADUser jkelly -ChangePasswordAtLogon $True
Вы можете сбросить пароль для нескольких пользователей одновременно (предположим, что имена учетных записей хранятся в текстовом файле user_to_reset.txt).
Используйте этот скрипт:
Get-Content C:\PS\user_to_reset.txt | Set-ADAccountPassword -NewPassword $newPass -Reset
Как изменить пароль для локальных учетных записей Windows?
Чтобы изменить пароли локальных пользователей Windows, вы можете использовать API интерфейса ADSI (Active Directory Services Interface), который может использоваться для взаимодействия с Active Directory или с автономными компьютерами.
Откройте командную строку PowerShell и перечислите локальные учетные записи пользователей на текущем компьютере:
get-wmiobject win32_useraccount
Вы также можете отобразить список локальных пользователей, например:
[adsi]$localPC = "WinNT://." $localPC.Children | where {$_.Class -eq "user"} | ft name, description –auto
Чтобы сбросить пароль локального пользователя, сначала выберите пользователя (в этом примере имя локальной учетной записи — ConfRoom):
[adsi]$user = "WinNT://./ConfRoom,user"
Задайте пароль:
$user.SetPassword("newP@s32w02rd")
Кроме того, вы можете запросить смену пароля при следующем входе в систему:
$user.Put("PasswordExpired",1)
Осталось сохранить изменения в учетной записи пользователя:
$user.SetInfo()
Эти же команды могут использоваться для изменения пароля пользователя на удаленных компьютерах.
Достаточно заменить [adsi] $ user = «WinNT: //./ConfRoom,user» командой [adsi] $ user = «WinNT: // RemotePCName / ConfRoom, user».
Чтобы установить одинаковый пароль для всех локальных пользователей, используйте следующий скрипт:
$NewPass = "ThisIsNewP@33" $localusers = Get-WmiObject -Class Win32_UserAccount -ComputerName $env:COMPUTERNAME -Filter LocalAccount='true' | select -ExpandProperty name foreach ($user in $localusers) { $user ([adsi]"WinNT://$env:COMPUTERNAME/$user").SetPassword("$NewPass ") }
User must change password. Снимаем и ставим галку при помощи Powershell.
Не знаю, многие ли сталкиваются с проблемой массового изменения(создания, настройки, добавления в группы) локальных пользователей. Мне пришлось.
Вопрос массового создания локальных пользователей был описан в статье. Сегодняшняя тема — дополнение к ней.
Как вы знаете, заставить пользователя сменить пароль при первом входе можно из графического интерфейса:
Но, если это нужно проделать с десятками или сотнями юзеров? Этот вариант не самый веселый.
Естественно, сразу на ум приходит использование командной строки или Powershell.
В этой статье мы посмотрим, как снять или поставить чекбокс о необходимости смены пароля пользователем при помощи маленькой «скриптюшечки» Powershell.
Когда я столкнулся с необходимостью поставить этот чекбокс у многих пользователей, я сразу решил сделать это при помощи Powershell, но, как оказалось, что именно этот чекбокс Powershell легко ставить и снимать не умеет.
То есть, вы можете отключить пользователя, разрешить или запретить ему менять пароль и т.д., но просто поставить и снять эту галку не сможете.
Ну что же, не сможем просто, будем искать «хоть как».
После довольно продолжительного «хождения в Гугл» мне удалось раскопать способ заставить эту «непокорную галку» ставиться и сниматься по нашему желанию.
Ниже приведены строчки, которые нам нужны(не забудьте запустить Powershell от имени Администратора):
$Path_to_csv = Read-Host «Введите путь до файла-списка пользователей»
$users = Import-Csv $Path_to_csv -Encoding Default -Delimiter «;»
foreach ($user in $users)
{
$user = Get-LocalUser -Name $user.Name
$usr = [ADSI]»WinNT://localhost/$user»
$usr.passwordExpired = 1
$usr.setinfo()
}
$Path_to_csv = Read-Host «Введите путь до файла-списка пользователей» $users = Import-Csv $Path_to_csv -Encoding Default -Delimiter «;» foreach ($user in $users) { $user = Get-LocalUser -Name $user.Name $usr = [ADSI]»WinNT://localhost/$user» $usr.passwordExpired = 1 $usr.setinfo() } |
-Параметр .passwordExpired делает пароль пользователя истекшим, что как раз и ставит или снимает чекбокс «User must change password». Если присвоить ему значение = 1, то галка поставится, если = 0, то снимется.
В этом скрипте пользователи берутся из файла .csv. О том, как должен выглядеть этот файл, читайте в статье
Powershell. Как создать локальных пользователей и добавить их в группы.
Скрипт можно использовать как самостоятельно, так и добавить нужные строки в скрипт создания новых пользователей.
Основой для скрипта послужила заметка https://gallery.technet.microsoft.com/scriptcenter/PowerShell-to-force-a-2db5562c
Поделиться ссылкой:
Похожее
Когда истекает пароль пользователя в AD, оповещаем пользователей о необходимости сменить пароль
В этой статье мы покажем, как с помощью PowerShell узнать, когда истекает пароль учетной записи пользователя в Active Directory, установить бессрочный пароль для учетной записи (PasswordNeverExpires = True) и заблаговременно оповестить пользователей о необходимости сменить пароль.
Если срок действия пароля пользователя в домене истек, учетная запись не блокируется, но не может использоваться для доступа к доменным ресурсам до тех пор, пока пользователь не сменит свой истекший пароль на новый. Чаще всего проблемы с истекшими паролями возникает у удаленных пользователей, которые не могут сменить свой пароль стандартными средствами.
Срок действия пароля пользователя в домене, частота его смены и требования к сложности и др. определяются настройками политикой паролей в AD. Это могут быть настройки Default Domain Policy или гранулированными политиками паролей (Fine-Grained Password Policy).
Текущие настройки политики срока действия паролей в домене можно получить с помощью команды PowerShell
Get-ADDefaultDomainPasswordPolicy|select MaxPasswordAge
В нашем примере максимальный срок действия пароля пользователя в домене – 60 дней.
Как узнать срок действия пароля пользователя в Active Directory?
Можно узнать срок действия пароля и дату его последней смены из командной строки с помощь команды Net user:
net user aaivanov /domain
Необходимые данные присутствуют в значениях:
- Password last set — 1/21/2020 11:18:37 AM
- Password expires — 3/21/2020 11:18:37 AM
- Password changeable — 1/22/2020 11:18:37 AM
Вы можете получить срок действия пароль для любого пользователя, не обязательно обладать правами администратора или делегированными полномочиями на контейнер с пользователями.
Для получения параметров учетных записей в AD мы будем использовать специальный модуль PowerShell для Active Directory, который позволяет получить значения различных атрибутов объектов AD (см. как установить и импортировать модуль AD PowerShell в Windows 10 и Windows Server 2012 R2/2016).
С помощью командлета Get-AdUser можно получить время последней смены пароля пользователя и проверить, установлена ли опция бессрочного пароля (PasswordNeverExpires):
get-aduser aaivanov -properties PasswordLastSet, PasswordNeverExpires, PasswordExpired |ft Name, PasswordLastSet, PasswordNeverExpires,PasswordExpired
- PasswordLastSet — время последней смены пароля пользователя;
- PasswordNeverExpires – возвращает значение True, если пароль пользователя никогда не устаревает;
- PasswordExpired – если пароль пользователя устарел — возвращает True, если пароль не устарел – False;
Можно проверить время последней смены пароля из графической оснастки Active Directory Users & Computers (dsa.msc). Для этого откройте свойства пользователя, перейдите на вкладку Редактор атрибутов, проверьте значение атрибута pwdLastSet.
Но как вы видите, в оснастке указана только время смены пароля. Когда истекает срок действия пароля — непонятно.
Чтобы получить не время последней смены пароля, а дату окончания его срока действия, нужно использовать специальный constructed-атрибут msDS-UserPasswordExpiryTimeComputed. Значение атрибута msDS-UserPasswordExpiryTimeComputed автоматически вычисляется на основании времени последней смены пароля и парольной политики домена
Параметр UserPasswordExpiryTimeComputed возвращает время в формате TimeStamp и для преобразования его в человеко-понятный вид я использую функцию FromFileTime:
Get-ADUser -Identity avivanov -Properties msDS-UserPasswordExpiryTimeComputed | select-object @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") }}
Таким образом мы получили время истечения срока действия пароля пользователя.
Если значение msDS-UserPasswordExpiryTimeComputed равно 0, значит pwdLastSet пустой (null) или равен 0 (пароль пользователя никогда не менялся).
Чтобы получить срок действия паролей для всех пользователей их определенного контейнера (OU) AD, можно воспользоваться таким скриптом PowerShell:
$Users = Get-ADUser -SearchBase 'OU=Users,OU=SPB,DC=corp,DC=winitpro,DC=ru' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword
$Users | select Name, @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime ($_."msDS-UserPasswordExpiryTimeComputed")}}, PasswordLastSet
В результате появилась табличка со списком активных пользователей, сроком действия и временем последней смены пароля.
Можно вывести только список пользователей, чей пароль уже истек:
$Users = Get-ADUser -SearchBase 'OU=Users,OU=SPB,DC=corp,DC=winitpro,DC=ru' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword
foreach($user in $Users){
if( [datetime]::FromFileTime($user."msDS-UserPasswordExpiryTimeComputed") -lt (Get-Date)) {
$user.Name
}
}
Отключить срок действия пароля для учетной записи
Если вам нужно сделать срок действия пароля определенной учетной записи неограниченным, нужно включить опцию Password Never Expires в свойствах пользователя в AD (это одно из битовых значений атрибута UserAccountControl).
Либо вы можете включить эту опцию через PowerShell:
Get-ADUser aaivanov | Set-ADUser -PasswordNeverExpires:$True
Можно установить флаг Password Never Expires сразу для нескольких пользователей, список которых содержится в текстовом файле:
$users=Get-Content "C:\PS\users_never_expire.txt"
Foreach ($user in $users) {
Set-ADUser $user -PasswordNeverExpires:$True
}
Можно вывести список всех пользователей, для которых отключено требование регулярной смены пароля:
Get-ADUser -filter * -properties Name, PasswordNeverExpires | where {$_.passwordNeverExpires -eq "true" } | Select-Object DistinguishedName,Name,Enabled |ft
Политика оповещения об окончании срока действия пароля
В Windows есть отдельный параметр групповой политики, позволяющий оповещать пользователей о необходимости сменить пароль.
Политика называется Interactive logon: Prompt user to change password before expiration и находится в разделе GPO Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Local Policies -> Security Options.
По умолчанию эту политика включена на уровне локальных настроек Windows и уведомления начинают появляться за 5 дней до истечения срока действия пароля. Вы можете изменить количество дней, в течении которых должно появляться уведомление о смене пароля.
После включения этой политики, если пароль пользователя истекает, то при входе в систему в трее будет появляться уведомление о необходимости сменить пароль.
Consider changing your password Your password will expire in xx days.
Также вы можете использовать простой PowerShel скрипт, который автоматически вызывает диалоговое окно со предложением сменить пароль, если он истекает менее чем через 5 дней:
Add-Type -AssemblyName PresentationFramework
$curruser= Get-ADUser -Identity $env:username -Properties 'msDS-UserPasswordExpiryTimeComputed','PasswordNeverExpires'
if ( -not $curruser.'PasswordNeverExpires') {
$timediff=(new-timespan -start (get-date) -end ([datetime]::FromFileTime($curruser."msDS-UserPasswordExpiryTimeComputed"))).Days
if ($timediff -lt 5) {
$msgBoxInput = [System.Windows.MessageBox]::Show("Ваш пароль истекает через "+ $timediff + " дней!`nХотите сменить пароль сейчас?","Внимание!","YesNo","Warning")
switch ($msgBoxInput) {
'Yes' {
cmd /c "explorer shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}"
}
'No' { }
}
}
}
Если пользователь нажимает ДА, появляется диалоговое окно Windows Security, которое вы видите при нажатии Ctrl+Alt+Del или Ctrl+Alt+End (при RDP подключении).
Данный скрипт нужно поместить в автозагрузку или запускать как logon скрипт групповых политик.
PowerShell скрипт для email-уведомления об истечении срока действия пароля
Если вы хотите индивидуально рассылать пользователям письма о том, что срок действия их паролей скоро истечет, можно использовать такой PowerShell скрипт.
$Sender = "[email protected]"
$Subject = 'Внимание! Скоро истекает срок действия Вашего пароля!'
$BodyTxt1 = 'Срок действия Вашего пароля для'
$BodyTxt2 = 'заканчивается через '
$BodyTxt3 = 'дней. Не забудьте заранее сменить Ваш пароль. Если у вас есть вопросы, обратитесь в службу HelpDesk.'
$smtpserver ="smtp.domain.com"
$warnDays = (get-date).adddays(7)
$2Day = get-date
$Users = Get-ADUser -SearchBase 'OU=Users,DC=corp,DC=winitpro,DC=ru' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, EmailAddress, Name | select Name, @{Name ="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, EmailAddress
foreach ($user in $users) {
if (($user.ExpirationDate -lt $warnDays) -and ($2Day -lt $user.ExpirationDate) ) {
$lastdays = ( $user.ExpirationDate -$2Day).days
$EmailBody = $BodyTxt1, $user.name, $BodyTxt2, $lastdays, $BodyTxt3 -join ' '
Send-MailMessage -To $user.EmailAddress -From $Sender -SmtpServer $smtpserver -Subject $Subject -Body $EmailBody
}
}
Скрипт проверяет всех активных пользователей домена с истекающими паролями. За 7 дней до истечения пароля пользователю начинают отправляться письма на email адрес, указанный в AD. Письма отправляются до тех пор, пока пароль не будет изменен или просрочен.
Данный PowerShell скрипт нужно запускать регулярно на любом компьютере/сервере домена (проще всего через Task Scheduler). Естественно, нужно на вашем SMTP сервере добавить IP адрес хоста, с которого рассылаются письма, в разрешенные отправители без аутентификации.
Set-ADUser изменение пользователя Powershell | FixMyPC
Set-ADUser команда изменения пользователя в Powershell. Для работы доступны большинство ключей, которые есть и при создании, а т.е. около 60 ключей.
Через эту команду мы не можем сменить пароль пользователя, но можем указать что бы он это сделал при следующем входе:
Set-ADUser -Identity "Test User (0001)" -ChangePasswordAtLogon $true
В качестве идентификатора можно использовать:
Т.к. параметров очень много, то получить их все мы можем так:
Get-Help Set-ADUser -Parameter *
А найти конкретный, по какому-то сочетанию, так:
Get-Help Set-ADUser -Parameter *Passw*
Мы уже получали список пользователей Powershell через Get-ADUser и детально рассматривать не будем. Например у нас может быть ситуация, что в каком-то отделе пользователи должны сменить пароль. Эти пользователи находятся в OU Moscow, домене domain.local. Мы получаем все учетные записи, а затем передаем на изменение:
Get-ADUser -Filter * -SearchBase "OU=Moscow,DC=domain,DC=local" | Set-ADUser -ChangePasswordAtLogon $true
У нас может быть ситуация, что мы не знаем какие пользователи уволены. Мы устанавливаем для себя формальный промежуток времени в 15 дней т.е. .если пользователь не заходил под своим аккаунтом в течении этого времени, то он будет отключен. Это делается так:
$date = (Get-Date).AddDays(-15)
$users = Get-ADUser -Filter * -Properties LastLogon | where -Property {Get-Date $_.LastLogon} -LT $date
$users | Set-ADUser -Enabled $false
Еще один пример, который чаще случается по понедельникам, когда пользователи забывают пароль и просят его сбросить. Нам нужно получить список пользователей, которые заблокированы системой и у которых неудачная попытка входа была за последние 30 минут. Всех их мы разблокируем и установим новый пароль:
#Устанавливаем дату в 30 минут назад
$date = (Get-Date).AddMinutes(-30)
#Получаем свойства заблокирован ли пользователь и дату последней неудачной попытки входа
$users = Get-ADUser -Filter * -Properties LockedOut,LastBadPasswordAttempt
#Проводим сравнение с условиями, что пользователь заблокирован и дата входа не более 30 минут назад
$locked_users = $users | where {(LockedOut -EQ $true) -and {LastBadPasswordAttempt -ge $date}}
#Создаем пароль
$new_pass = ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force
#Указываем, что пароль должен быть сменен при входе
$locked_users | Set-ADUser -ChangePasswordAtLogon
#Устанавливаем пароль
$locked_users | Set-ADAccountPassword -NewPassword $new_pass
#Разблокируем аккаунт
$locked_users | Unlock-ADAccount
Конечно, эти скрипты не очень оптимизированы и условия не совсем подходят для реального мира, показан принцип подхода к задачам.
У меня есть некий CSV файл, который содержит список телефонов и логины пользователей. Мне нужно заменить их у пользователей. CSV файл выглядит так:
Т.к. у меня есть идентификатор, который подходит для Set-User, мне не нужно искать пользователей через Get-User и я сразу могу выполнить изменения:
$csv_data = Import-Csv -Path C:\Data.csv -Delimiter ";"
$csv_data | % {Set-ADUser -Identity $_.SamAccountName -OfficePhone $_.OfficePhone}
Делиметр — это разделитель вашего файла, он может быть запятой или табуляцией. Стоит посмотреть какой он у вас.
У каждого объекта AD есть атрибуты, которые мы можем посмотреть и изменить:
Для работы с ними в наше команде есть четыре ключа:
- Remove — удаляет одно значение атрибута
- Add — добавляет значение атрибута
- Replace — заменяет значение атрибута
- Clear — удаляет все значения атрибута
Все ключи принимают на вход тип данных hashtable, а это так:
$hasht = @{Attr="Val1","Val2";Attr2="Val3"}
Для примера заменим имя компании у одного из пользователей:
Set-ADUser -Identity "Test User (0003)" -Replace @{Company='FixMyPC'}
…
Теги:
#powershell
#ad
Как изменить пароль Windows с помощью командной строки или PowerShell
Windows позволяет любому пользователю легко изменить свой пароль из стандартного меню настроек. Но что, если они забудут об этом или даже застрянут на экране входа в систему с отключенной учетной записью локального администратора?
В этом случае вы можете подключиться к их машине с помощью инструмента удаленного рабочего стола, такого как FixMe.IT, и назначить новый пароль Windows через командную строку или PowerShell.
Вот как это сделать.
Изменить пароль Windows для локального пользователя
- Запустите командную строку от имени администратора или запустите Windows 10 в безопасном режиме с помощью командной строки на экране входа в систему.
- Введите
net user ИМЯ ПОЛЬЗОВАТЕЛЯ NEWPASS
, где вам нужно заменить ИМЯ ПОЛЬЗОВАТЕЛЯ и NEWPASS на фактическое имя пользователя и новый пароль для этого пользователя. - Если фактическое имя пользователя состоит из более чем двух слов, поместите его в кавычки.
- Нажмите Введите .
Для дополнительной безопасности вы можете использовать следующую команду: net user ИМЯ ПОЛЬЗОВАТЕЛЯ *
. Затем Windows дважды предложит вам ввести пароль. Таким образом, никто из окружающих не сможет увидеть пароль на вашем экране.
Изменить пароль Windows для пользователя домена
- Запустите командную строку от имени администратора или запустите Windows 10 в безопасном режиме с помощью командной строки на экране входа в систему.
- Введите
сетевой пользователь / домен ИМЯ ПОЛЬЗОВАТЕЛЯ NEWPASS
. Замените ИМЯ ПОЛЬЗОВАТЕЛЯ и NEWPASS фактическим именем пользователя и новым паролем для этого пользователя. - Если фактическое имя пользователя состоит из более чем двух слов, поместите его в кавычки.
- Нажмите Введите .
Изменить пароль Windows для пользователя домена с помощью PowerShell
- Запустите PowerShell от имени администратора.
- Используйте командлет Set-ADAccountPassword для изменения пароля пользователя:
Set-ADAccountPassword -Identity $ user -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "$ newPass" -Force)
Замените $ user и $ newPass на фактическое имя пользователя и новый пароль. - Нажмите Введите .
Вы нашли эту статью полезной? Ознакомьтесь с другими советами и рекомендациями по Windows в нашем блоге и подпишитесь на нас в Facebook, Twitter или LinkedIn, чтобы получать все последние сообщения и обновления по мере их появления.
Узнать больше о FixMe.IT
.
Изменение пароля локального пользователя и пользователя Active Directory с помощью PowerShell — TheITBros
Администратор может изменить пароль локальных пользователей на компьютере с помощью графической оснастки «Локальные пользователи и группы» (lusrmgr.msc). Для изменения пароля пользователя домена AD в основном используется консоль графического интерфейса пользователя и компьютера Active Directory (ADUC). Однако в некоторых случаях администратору может потребоваться изменить пароль пользователя из командной строки или в каком-либо сценарии. В этой статье мы покажем, как управлять паролями пользователей (как локальными, так и доменными) с помощью PowerShell.
Как изменить пароль пользователя Active Directory с помощью PowerShell?
Чтобы изменить пароль пользователя Active Directory, используйте командлет Set-ADAccountPassword из модуля Active Directory для Windows PowerShell. Конечно, пользователь, запускающий командлет, должен иметь права администратора домена или должен быть делегирован для сброса паролей пользователей AD.
Перед использованием командлета Set-ADAccountPassword необходимо импортировать этот модуль в сеанс PowerShell:
Import-Module ActiveDirectory
Пароль в памяти компьютера желательно хранить в защищенном виде, чтобы вы могли попросить администратора укажите пароль следующим образом:
$ newPass = Read-Host "Введите новый пароль пользователя" -AsSecureString
Введите новый пароль в консоли PowerShell.
Имя учетной записи AD лучше указывать в виде samAccountname. Например, чтобы изменить пароль для пользователя jkelly, выполните команду:
Set-ADAccountPassword jkelly -NewPassword $ newPass
Вы можете установить новый пароль пользователя непосредственно в коде сценария:
Set-ADAccountPassword jkelly – NewPassword (ConvertTo-SecureString -AsPlainText –String "St0ngPwd @ d" -force)
Если вы хотите, чтобы пользователь изменил пароль при следующем входе в систему, выполните команду:
Set-ADUser jkelly -ChangePasswordAtLogon $ True
Вы можете сбросить пароль сразу для нескольких пользователей (предположим, что имена учетных записей хранятся в текстовом файле user_to_reset.текст). Используйте этот сценарий:
Get-Content C: \ PS \ user_to_reset.txt | Set-ADAccountPassword -NewPassword $ newPass -Reset
Как изменить пароль для локальных учетных записей Windows?
Для изменения паролей локальных пользователей Windows можно использовать API ADSI (интерфейс служб Active Directory), который можно использовать для взаимодействия с Active Directory или с автономными компьютерами.
Откройте командную строку PowerShell и перечислите локальные учетные записи пользователей на текущем компьютере:
get-wmiobject win32_useraccount
Вы также можете отобразить список локальных пользователей, например:
[adsi] $ localPC = "WinNT : //." $ localPC.Children | где {$ _. Class -eq "user"} | ft name, description –auto
Чтобы сбросить пароль локального пользователя, сначала выберите пользователя (в этом примере имя локальной учетной записи — ConfRoom):
[adsi] $ user = "WinNT: //./ConfRoom,user"
Установите пароль:
$ user.SetPassword ("newP @ s32w02rd")
Дополнительно вы можете запросить смену пароля при следующем входе в систему:
$ user.Put ("PasswordExpired", 1)
It Осталось сохранить изменения в учетной записи пользователя:
$ пользователь.SetInfo ()
Те же команды можно использовать для изменения пароля пользователя на удаленных компьютерах. Достаточно заменить [adsi] $ user = ″ WinNT: //./ConfRoom,user ″ на команду [adsi] $ user = ″ WinNT: // RemotePCName / ConfRoom, user ″ .
Чтобы установить одинаковый пароль для всех локальных пользователей, используйте следующий сценарий:
$ NewPass = "ThisIsNewP @ 33" $ localusers = Get-WmiObject -Class Win32_UserAccount -ComputerName $ env: COMPUTERNAME -Filter LocalAccount = 'true' | выберите -ExpandProperty name foreach ($ user в $ localusers) { $ пользователь ([adsi] "WinNT: // $ env: COMPUTERNAME / $ user").SetPassword ("$ NewPass") }
Мне нравятся технологии и разработка веб-сайтов. С 2012 года я веду несколько собственных веб-сайтов и делюсь полезным контентом по гаджетам, администрированию ПК и продвижению сайтов.
Последние сообщения Кирилла Кардашевского (посмотреть все).
Как изменить пароль учетной записи с помощью PowerShell в Windows 10 • Pureinfotech
В Windows 10 вы можете изменить пароль локальной учетной записи несколькими способами с помощью панели управления, командной строки и даже с помощью PowerShell.
Если вам необходимо изменить или сбросить пароль своей учетной записи из-за того, что он был взломан, или его слишком легко угадать, и вы хотите установить более сложный пароль, вы можете использовать несколько простых команд PowerShell.
В этом руководстве вы узнаете, как изменить текущий пароль локальной учетной записи Windows 10 с помощью PowerShell.
Как изменить пароль учетной записи с помощью PowerShell
Чтобы изменить пароль локальной учетной записи с помощью PowerShell, выполните следующие действия:
Открыть Старт .
Найдите PowerShell , щелкните правой кнопкой мыши верхний результат и выберите Запуск от имени администратора .
Введите следующую команду, чтобы вывести список всех доступных учетных записей, и нажмите Введите :
Get-LocalUser
Команда PowerShell Get-LocalUser
Введите следующую команду, чтобы создать и сохранить новый пароль внутри переменной, и нажмите Введите :
$ Password = Read-Host "Введите новый пароль" -AsSecureString
Введите новый пароль для учетной записи и нажмите Введите .
Введите следующую команду и нажмите Введите в каждой строке, чтобы применить новый пароль к локальной учетной записи:
$ UserAccount = Get-LocalUser -Name "admin" $ UserAccount | Set-LocalUser -Password $ Пароль
Во второй команде не забудьте заменить «admin» на имя учетной записи, пароль которой вы хотите сбросить.
Команды PowerShell для изменения пароля учетной записи
По завершении всех шагов выйдите и войдите в свою учетную запись Windows 10 с новым паролем.
Приведенные выше инструкции применимы к локальной учетной записи. Если вы используете учетную запись Microsoft, вам необходимо выполнить следующие действия, чтобы изменить или сбросить пароль.
Если вы хотите сбросить пароль с помощью командной строки, воспользуйтесь другим руководством.
Хотя это руководство посвящено Windows 10, описанные выше действия также должны работать в Windows 8.1 и Windows 7.
.
Могу ли я изменить свой пароль в Active Directory с помощью Powershell
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.