POWERSHELL / ACTIVEDIRECTORY
ProIntermediateRead-onlylow

Find AD passwords expiring soon

Find enabled Active Directory users whose passwords expire within a chosen number of days, using the default or applicable fine-grained password policy.

Generated securely after server-side Pro license validation · Review before running · Opselith does not connect to your tenant

What this PowerShell script does

Finds enabled users whose domain controller-calculated password expiry falls within the next chosen number of days.

Requirements

  • Days to expiry - e.g. 14
  • CSV output path - Example: C:\Temp\report.csv

Environment

  • Module: ActiveDirectory
  • Permissions: Directory read access
  • Output: CSV report
  • Context: Windows host with RSAT
  • Risk: Low
Review before you run The script is generated securely after server-side Pro license validation. Test outside production first.
NEXT STEP

Ready to generate

Configure Find AD passwords expiring soon in the Builder, review the generated PowerShell and run it yourself in your own PowerShell session.

More about this script

Why use this template?

Use this PowerShell template when you need to find enabled users whose password age is within a chosen number of days. It can be previewed in the Builder; Pro access is required to generate it for your own environment.

The template uses ActiveDirectory and requires Directory read access. Output: CSV report. Level: Intermediate. Action: Read-only. Risk: Low.

Review before running

The script remains preview-only until Pro access is enabled. Review it before running it, and test it outside production first. “Read-only” describes the script itself; anything you add around it can still change data.

Preview the script

  1. Open the template in the PowerShell Builder.
  2. Review the purpose, requirements, permissions, output and risk.
  3. Activate Pro when you are ready to generate the full script, then test it outside production.

Pro templates remain previewable before purchase or activation. No tenant connection is required. When you generate a Pro script, only the configuration values needed for that template are sent to Opselith after license validation.Preview Find AD passwords expiring soon →

How to use this result

Use this report to find enabled Active Directory users whose calculated password expiry date falls within the number of days you choose.

When this helps

  • Prepare a password-expiration follow-up list before users are affected.
  • Review upcoming expirations across users governed by the default domain policy or a fine-grained password policy.
  • Export the calculated expiry date and policy source to CSV for helpdesk or identity operations.

How to read the result

  • The template starts with the default domain password policy and uses a user's resultant fine-grained password policy when msDS-ResultantPSO is present.
  • Users with PasswordNeverExpires, no PasswordLastSet value or a non-expiring MaxPasswordAge are excluded from the normal expiring-soon results.

Things to check

  • The report calculates expiry from PasswordLastSet and the applicable MaxPasswordAge. Confirm policy design and exceptions before contacting users or changing accounts.
  • A per-user policy lookup can fail for an individual account; the report records that row as an error instead of silently treating it as a valid expiry result.

What to do next: Prioritize the soonest expiry dates, confirm the policy source and user ownership, then use your normal password-notification or support process.

Related tasks

Official references

Before you runModule, permissions, inputs, compatibility and script checks
OPS / SCRIPT DETAILS

Script details

Finds enabled users whose domain controller-calculated password expiry falls within the next chosen number of days. Review these details before generating or running the script.

securityfinduserspermissionspassword
Generated here. Run by you.Opselith does not connect to your tenant or run PowerShell. After generating, review the script and run it in your own PowerShell session.

What it works with

Module: ActiveDirectory

ActiveDirectory lets PowerShell work with on-premises Active Directory and is normally installed through Windows RSAT.

Context: Windows host with RSAT

Compatibility: Windows PowerShell 5.1 / ISE is supported for this Windows administration template.

Permissions and changes

Permissions: Directory read access

Risk: Low

Read-only: designed to collect information without intentionally changing the target environment.

Changes: Read-only. The script reads data and does not intentionally change the target environment.

Inputs

  • Days to expiry - e.g. 14 (Required)
  • CSV output path - Example: C:\Temp\report.csv (Required)

What to expect

Output: CSV report

Expect a CSV file at the path you choose. Open it in Excel or another CSV viewer and review the rows.

Example: C:\Temp\report.csv

This template is in the Pro library. Generating the full script requires eligible Pro or tester access. Opselith receives only the values needed to build the script; it does not connect to your tenant, run PowerShell or store the generated script. You review and run the result in your own PowerShell session.

Example use

Finds enabled users whose domain controller-calculated password expiry falls within the next chosen number of days.

Enter the required values in the Builder, review the generated script and confirm the output before running it.

Before you run: Make sure your account has Directory read access. Check that the ActiveDirectory PowerShell module is available and that you are using the supported PowerShell version. Review the generated script and output path, then test outside production first.
Script checksWhat has been verifiedQA reviewed
Static checksPassed
PSScriptAnalyzerPending
Real-world run testNot yet recorded
Last checkedNot yet recorded

Real-world run results are shown only after Opselith reviews and accepts a tester report.

Tester: report a result →
TEST STATUSWhat Opselith has checked

Last reviewed: 10 Sept 2026

PSScriptAnalyzer: Awaiting a release PSScriptAnalyzer gate that includes this script. No analyzer pass is claimed yet.

Pending or Not yet recorded means there is no accepted result on file yet. A passed analyzer check does not mean the script has been run in a real tenant.