How to Get AD Users Password Expiration Date

In this guide, I’ll show you how to get the password expiration date for Active Directory User Accounts.

This is very easy to do.

I will provide a few examples that go over how to get this information for a single user and how to get the expiration date for all AD users.

Check it out.

Method 1: Using Net User command to Display User Expiration Date

This first method uses the net user command that is built into windows. This command is used to add, remove and make changes to user and computer accounts.

To determine when the password will expire for a single account open the command prompt and type the following command:

Net user USERNAME /domain

In the below screenshot is an example for the user mfoster.

In addition to displaying the password expires date it also provides other useful information such as password last set, when the password can be changed, if the account is active and so on.

That is it for method 1.

Recommended Free Tool: Get instant visibility into user and group permissions. Download Permissions Analyzer for Active Directory

Method 2: Using PowerShell To List All Users Password Expiration Date

To query user information with PowerShell you will need to have the AD module installed. If you have the RSAT tools loaded then you are good to go.

To find the date the password was last set, run this command.

get-aduser -filter * -properties passwordlastset, passwordneverexpires |ft Name, passwordlastset, Passwordneverexpires

In the screenshot below you can see it returns all users, password last set date and if the password never expires.

To display the expiration date rather than the password last set date, use this command.

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

Above command https://blogs.technet.microsoft.com/poshchap/2014/02/21/one-liner-get-a-list-of-ad-users-password-expiry-dates/and source:

To export any of the PowerShell results to a CSV just add | export-csv FILEPATH to the end.

I told you this was going to be easy. The PowerShell commands you can literally copy and past and they should work in your environment.  The Net User command just requires you to enter in an AD user account to query.

Method 3: Using the Active Directory Pro Toolkit

The AD Pro Toolkit includes several Active Directory Tools for reporting and exporting user accounts.

The toolkit has the following benefits:

  • Select users from a group
  • Select users from an OU
  • Easily add or remove user attributes
  • Export to a CSV file
  • Sort and search the results

In this example, I’ll use the export tool to list all user’s password last set date, and include some other attributes like lastlogon, whenChanged, and when created.

The attribute selector makes it very easy to add and remove user attributes to the report.

After running the tool I get a list of users and additional data from Active Directory if it exists.

Next, you can filter on any column or use the export button to export to a CSV file.

You can try the AD User Export Tool in your domain by downloading a free trial.

Related Posts:

How to get Users Last Logon Date

Recommended Tool: Permissions Analyzer for Active Directory

This FREE tool lets you get instant visibility into user and group permissions and allows you to quickly check user or group permissions for files, network, and folder shares.

You can analyze user permissions based on an individual user or group membership.

This is a Free tool, download your copy here.

59 thoughts on “How to Get AD Users Password Expiration Date”

  1. So I have a separate OU users in a different user that I want to see when there password expires.
    Were would I make the change for this with in a domain tree?

    Reply
    • How do I get the expiration date for few users that I have in a csv format using method 2? I know the command mentioned in here will give me the list of all the users in my org.

      Reply
  2. The second method is more accurate if you have Fine-grained Password Policies enabled in the domain.

    Net Use only shows the result from the Default Domain Policy.

    Reply
    • Good Tip. Thanks for the comment.

      Reply
  3. Found your “Method two” very useful, thanks for publishing!

    Reply
    • Awesome ❗ ❗

      Reply
  4. Nice tips! 🙂

    Reply
  5. How to get especially service account password expire date.

    Reply
  6. EXCELLENT = Do you know how to filter by a date ?
    say passwordlastset > today-2

    Reply
    • Add
      Sort-Object -property ExpiryDate

      Reply
    • $dayb4yesterday = (get-date).AddDays(-2)
      get-aduser -filter {passwordlastset -gt $dayb4yesterday}

      Reply
  7. Is there a field like Enabled that we can use to filter out this where this isn’t set for the user that shows up “12/31/1600 7:00:00 PM”.

    Reply
    • Yes use the below code to return just the enabled users

      get-aduser -filter {Enabled -eq $TRUE} -properties passwordlastset, passwordneverexpires |ft Name, passwordlastset, Passwordneverexpires

      Reply
  8. Hi, how do I query if the password change was successful through powershell?
    thanks for this site by the way, it helped guide me quite alot! 🙂

    Reply
  9. Something useful from Method 1:

    $m=’Password expires’;($MyExp = net user $env:USERNAME /domain | %{if($_ -match $m){get-date ($_ -replace $m,”).trim()}});rv m;

    Reply
  10. Great! It was really helpfull!!

    Reply
  11. Nice set of commands/scripts, very helpful!

    Reply
    • Thank Jim

      Reply
  12. Timely help! Many thanks.

    Reply
  13. If there are multiple OU’s and you want to find the expiring passwords for a specific OU, how would you do that? I’m guessing with ‘-searhbase’, but not sure how. – Thanks

    Reply
  14. how about specifying the user name in your step 2 query?

    Reply
    • Here is an example for a specific user

      get-aduser -Identity Alonso.Hall -properties passwordlastset, passwordneverexpires |ft Name, passwordlastset, Passwordneverexpires

      Reply
  15. Nice trick but how about to get user properties from different domain?

    Reply
    • Use the -server to specify the domain server instance

      Get-ADUser -Filter “Name -eq ‘ChewDavid'” -SearchBase “DC=AppNC” -Properties “mail” -Server lds.Fabrikam.com

      Reply
  16. Method #1 is great. Thanks!!

    Reply
  17. Hi

    I need Only OU level

    Reply
    • You can target an OU by using the -searchbase and the DN of the OU.

      Get-ADUser -Filter * -SearchBase "OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM"

      Reply
      • Hey robert should I put this command in the line with getaduser after the filter parameters?

        Reply
        • Hi Lucas,

          I’m not sure what you are asking.

          Reply
          • He was just trying to ask you if the command was all on one line. 🙂

  18. I seem to be having an issue using the -searchbase in the Method-2 above. I keep getting a message ” A parameter cannot be found that matches parameter name ‘SearchBase’. ” Is this possibly a location issue where I am not putting it in the correct location within the Method-2 command?

    Reply
  19. In method 2, is there a way to get the expiring users in the next seven days?

    Reply
    • I am looking for a way to do this as well. I am trying to compile a list of users and when their passwords will expire.

      Reply
  20. Can you do this without using Get-ADUser?

    Reply
  21. I am using the following commandlet to get the list of last password set and then using a variable to get the value and add -365 to it, however this variable is not getting populated.
    I can see the commandlet work and output values but the variable I am using $PWdLastSet.passwordlastset is not getting any value, am I doing something wrong ?

    $PWdLastSet = get-aduser -filter * -properties passwordlastset, passwordneverexpires -SearchBase “OU=Service Accounts,OU=SG1,OU=AT,DC=wt,DC=ad,DC=cit,DC=cc” |ft Name, passwordlastset, Passwordneverexpires

    $expiredDate = $PWdLastSet.passwordlastset.addDays(-365)

    Reply
  22. Can you specify a specific user?

    Reply
    • Yes. just use -identity USERNAME. Here is an example

      get-aduser -identity robert.allen -properties passwordlastset, passwordneverexpires | select Name, passwordlastset, Passwordneverexpires

      Reply
    • Get-ADUser Ryan

      Reply
  23. Thanks for sharing this, its helpful.
    Is it possible to trim the expiration date..? Just want the date, without time. if so, can you please help with that..?

    Reply
  24. Thanks for sharing this stuff. I have one question

    The expiry time it shows, in which time zone is it, central time ? or the time zone set on the server ?

    Reply
    • It’s pulling the time value from the user account on the server.

      Reply
  25. Thanks for sharing 🙂
    Do you know how can i extend the password expiration date by 6 months for all users on AD ?

    Reply
  26. I’m still having trouble getting it to sort by date. It’ll sort alphabetically when I do a sort-object, but expiry just puts them in a random order each time, even though the command runs. Any suggestions?

    Reply
  27. How do you get it to export? It keeps asking for inputobject in method 2 after adding Export-Csv -Path

    Reply
  28. Is there a way to display the date in chronological order? I’m getting the expiration date report but not in order by date. Thank you in advance.

    Reply
    • Yes. Use the sort-object cmdlet.

      get-aduser -filter * -properties passwordlastset, passwordneverexpires | sort-object passwordlastset

      Reply
  29. Hi!
    How Can I get the Logon Name if I only have the display name?
    Thank you in advance.

    Reply
    • You can find the logon name in Active Directory Users and Computers.

      Reply
  30. Nice, trying to filter on “ExpiryDate” but can’t get that work.
    usecase: I want to generate a file of users which have a password experation 5, 4, 3, 2 or 1 day from now.

    Reply
  31. It’s a nice script, but we have so many users that I like to do the following:

    -Filter to only show users with password expriring within 7 days from today (we have fine-grained password policies)
    -Output as JSON (on console)

    For me, that is quite hard to do, for you guys not I guess, can you show me how ?

    Reply
  32. How is it possible to check expiracy for group of users. So instead of either all or just 1 user – i would like to check like user1, user 2 and user 3 – instead of have check one at a time

    Reply
  33. İt worked for me Thank you for your work

    Reply
  34. Hi Robert,

    I want to reset passwordlast set date for a list of users. Any idea how I can achieve this?

    Thanks!

    Reply
    • I don’t think that is possible.

      Reply
  35. Hi Robert.
    Great script very helpful, I could not see if this question has been asked/answered already however, is there a way to target a AD group using method 1 to get a specific group such as Net user “group-name” /domain to pull a list of all users from that group with their password expiry dates?

    Kind regards

    Reply
  36. Is there any way in which we can ask users to reset the password. The AD is configured in the VM and LDAP is setup within the VM. We wanted to make it simple for the users by providing the link in email where one user can go and re-set the AD Password. Can you please provide the out of the box url or confirm if i need to write the code to the same.

    Reply
    • There is no out of the box URL for resetting passwords, you would need a 3rd party solution. On a windows computer, users can change their own password by using control-alt-delete and then selecting change password.

      Reply

Leave a Comment