- Когда истекает пароль пользователя в AD, оповещаем пользователей о необходимости сменить пароль
- Как узнать срок действия пароля пользователя в Active Directory?
- Отключить срок действия пароля для учетной записи
- Политика оповещения об окончании срока действия пароля
- PowerShell скрипт для email-уведомления об истечении срока действия пароля
- Как создать никогда не истекающий пароль и пользователя через пользователя net через файл .bat
- Set password to never expire
- Set password to never expire from CMD
- Using User accounts console
- Related posts:
- Net user expires never не работает
- Answered by:
- Question
- Answers
- All replies
Когда истекает пароль пользователя в AD, оповещаем пользователей о необходимости сменить пароль
В этой статье мы покажем, как с помощью PowerShell узнать, когда истекает пароль учетной записи пользователя в Active Directory, установить бессрочный пароль для учетной записи (PasswordNeverExpires = True) и заблаговременно оповестить пользователей о необходимости сменить пароль.
Если срок действия пароля пользователя в домене истек, учетная запись не блокируется, но не может использоваться для доступа к доменным ресурсам до тех пор, пока пользователь не сменит свой истекший пароль на новый. Чаще всего проблемы с истекшими паролями возникает у удаленных пользователей, которые не могут сменить свой пароль стандартными средствами.
Текущие настройки политики срока действия паролей в домене можно получить с помощью команды PowerShell
В нашем примере максимальный срок действия пароля пользователя в домене – 60 дней.
Как узнать срок действия пароля пользователя в Active Directory?
Можно узнать срок действия пароля и дату его последней смены из командной строки с помощь команды Net user:
net user aaivanov /domain
Необходимые данные присутствуют в значениях:
- Password last set — 1/21/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;
Но как вы видите, в оснастке указана только время смены пароля. Когда истекает срок действия пароля — непонятно.
Чтобы получить не время последней смены пароля, а дату окончания его срока действия, нужно использовать специальный constructed-атрибут msDS-UserPasswordExpiryTimeComputed. Значение атрибута msDS-UserPasswordExpiryTimeComputed автоматически вычисляется на основании времени последней смены пароля и парольной политики домена
Параметр UserPasswordExpiryTimeComputed возвращает время в формате TimeStamp и для преобразования его в человеко-понятный вид я использую функцию FromFileTime:
Таким образом мы получили время истечения срока действия пароля пользователя.
Чтобы получить срок действия паролей для всех пользователей их определенного контейнера (OU) AD, можно воспользоваться таким скриптом PowerShell:
$Users = Get-ADUser -SearchBase ‘OU=Users,OU=SPB,DC=corp,DC=winitpro,DC=ru’ -filter
$Users | select Name, @
В результате появилась табличка со списком активных пользователей, сроком действия и временем последней смены пароля.
Можно вывести только список пользователей, чей пароль уже истек:
$Users = Get-ADUser -SearchBase ‘OU=Users,OU=SPB,DC=corp,DC=winitpro,DC=ru’ -filter
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 дней до истечения срока действия пароля. Вы можете изменить количество дней, в течении которых должно появляться уведомление о смене пароля.
После включения этой политики, если пароль пользователя истекает, то при входе в систему в трее будет появляться уведомление о необходимости сменить пароль.
Также вы можете использовать простой 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 = «info@winitpro.ru»
$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
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 адрес хоста, с которого рассылаются письма, в разрешенные отправители без аутентификации.
Источник
Как создать никогда не истекающий пароль и пользователя через пользователя net через файл .bat
Я использую .bat file для создания пользователя и пароля на уровне операционной системы Windows.
Проблема, с которой я сталкиваюсь, заключается в том, что, когда я передаю EXPIRES:NEVER пароль, когда пользователь создается, на нем не установлен «Password never expires» флажок (это означает, что для этого созданного пользователя пароль никогда не истекает), а срок действия пользователя истекает автоматически через 90 дней.
Выше приведена основная строка кода, я передаю имя пользователя и пароль из текстового файла и запускаю файл .bat.
Добавьте эту строку в командный файл:
Опция / истекает для учетной записи, а не для пароля, проверьте справку команды.
Из документации: «Вызывает истечение срока действия учетной записи пользователя, если вы укажете дату».
net user Команда может использоваться на местном, а также учетные записи домена. Используйте /domain переключатель для учетных записей домена.
Например, чтобы просмотреть информацию для пользователя домена% 1, используйте
Полный список сетевых параметров пользователя приведен здесь:
Один пользователь AD
Для активных пользователей каталога вы можете использовать команду dsmod, чтобы изменить ее для одного пользователя:
Несколько пользователей AD
Если вы хотите массово установить это свойство, вы можете сделать это для всей организационной единицы (OU), используя вышеуказанное в сочетании с dsquery .
Сначала, чтобы вывести список всех пользователей в OU (это безопасно для запуска, потому что он выводит только список пользователей):
Затем, предполагая, что вы довольны выводом приведенной выше команды, вы можете передать ее в dsmod следующим образом:
Источник
Set password to never expire
Learn how to configure a user account so that the password never expires. This can be done from Windows command prompt as well as in “local user accounts” console.
Set password to never expire from CMD
Run the following steps to disable password expiry from command line.
- Open elevated admin command prompt
- Run the command.
Example: To never expire password of administrator account.
You can see above that the password would expire on 9/12. Now we are going to change that.
Checking password expiry date now
Using User accounts console
Do the following steps to disable password expiry in user account console.
- Execute the command lusrmgr.msc from Run.
- Click on users in the list displayed on the left side
- Double click on the user account you would like to update
- Select the check button Password never expires . Click OK
Related posts:
Add double quotes in after the WHERE keyword like “Name=’admin’” on all queries. Otherwise you will get invalid query error
it works perfect and it’s very useful
Does net user have an argument to set password never to expire. I’m trying to do it without wmic
this is what I get:
Unexpected switch at this level.
You can use the net command to set all accounts to never expire passwords:
net accounts /maxpwage:unlimeted
This also works for an entire Active Directory domain by adding the /domain parameter:
net accounts /maxpwage:unlimited /domain
I tested last option on an server 2016 domain controller.
Источник
Net user expires never не работает
This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.
Answered by:
Question
I have currently disabled and re-named the Windows 8.1 built in administrator and guest accounts. I would now like to create a local user via command line and set the account password to never expire but there doesn’t seem to be a switch for that option.
- /PASSWORDCHG:NO to prevent the password from being changed
- /AVTIVE:YES
Any assistance would be greatly appreciated 🙂
Answers
Based on your description, we may try this by an elevated command window:
“net accounts / MaxPWAge : unlimited
net user % username % / expires : never”
“wmic useraccount WHERE «Name=’%username%'» set PasswordExpires = false”
In addition, you could also refer to this case:
Please remember to mark the replies as answers if they help, and unmark the answers if they provide no help. If you have feedback for TechNet Support, contact tnmff@microsoft.com.
- Proposed as answer by Tony_Tao Thursday, March 10, 2016 7:17 AM
- Marked as answer by Kate Li Microsoft employee Wednesday, March 16, 2016 2:17 AM
All replies
You might try this:
WMIC USERACCOUNT WHERE «Name=’username» SET PasswordExpires=FALSE
Please click on Propose As Answer or to mark this post as and helpful for other people. This posting is provided AS-IS with no warranties, and confers no rights.
Based on your description, we may try this by an elevated command window:
“net accounts / MaxPWAge : unlimited
net user % username % / expires : never”
“wmic useraccount WHERE «Name=’%username%'» set PasswordExpires = false”
In addition, you could also refer to this case:
Please remember to mark the replies as answers if they help, and unmark the answers if they provide no help. If you have feedback for TechNet Support, contact tnmff@microsoft.com.
- Proposed as answer by Tony_Tao Thursday, March 10, 2016 7:17 AM
- Marked as answer by Kate Li Microsoft employee Wednesday, March 16, 2016 2:17 AM
None of these examples work. If someone finds this I hope this works for you:
net user ACCOUNTNAME PASSWORD /add /active:yes
wmic useraccount WHERE Name=’ACCOUNTNAME’ set PasswordExpires=false
wmic useraccount WHERE Name=’ACCOUNTNAME’ set PasswordChangeable=false
This will create the local account ACCOUNTNAME, mark it active, password never expires, and no one can change it.
This is a great step to add during your SCCM OSD or MDT OSD to ensure you have a local guest account in case a remote user’s device falls off the domain and you’d like to remote in and rejoin rather than having them mail the device back.
Источник