Windows Server or Azure Administrators often need to notify end-users about imminent or upcoming password expirations. This is especially true as companies intensify their security measures for complaince reasons or for enhanced security measures. A proactive approach will usually reduce the number of incoming helpdesk tickets for this seemingly very simple, yet often overlooked issue which plauges most IT departments.
There is, however, another persistent issue: users who don’t reset passwords in time. This problem becomes pronounced when high-ranking personnel, such as Directors, VP, or C-Level executives, can’t access the network during critical times, like during a holiday shutdown.
A very common workaround involves an IT administrator setting the problematic user account password to “never expires,” circumventing the defualt password policy in directories like Active Directory. This poses additional security risks.
Various scripts which aim to address this concern are available on platforms like the Microsoft Developer Network. Still, none met my personal specific requirements that were presented. For instance, none provided email notifications with logging features. Moreover, since my previous company used Google Workplace for emails, I required a script compatible with G Suite/Google Workplace and supported PowerShell 7.
Planned Scenarios
- 30 days before password expiration -> Notify user.
- 14 days (2 weeks) before expiration -> Notify user.
- 7 days (1 week) before expiration -> Notify both user and administrator(s).
- 3 days before expiration -> Send an URGENT/high-priority email to the user and notify the administrator.
- 1 day before expiration -> Send an URGENT/high-priority email to the user and notify the administrator.
- When the password has already expired -> Determine subsequent actions.
Notification Considerations
- Link to instructions for early password change.
- Link to specific specific service (i.e. Okta/OneLogin single-sign on platform)
- Link to video tutorial demonstrating a password reset procedure.
- Screenshots
- Decide if notifications should be sent to the user’s manager or lead.
- Include a link to the company’s password policy.
- Provide a link to the company’s service-desk or helpdesk ticketing system.
Notably, very few methods exist for users to reset passwords post-expiration. Even renowned platforms like Okta or OneLogin face challenges here, particularly when authentication is federated to Active Directory. This federation often leads to lost visibility into passowrds whcih presents challenges with password policy enforcement.
Given the lack of comprehensive solutions, I developed a feature-rich PowerShell, which fixes “everything but the kitchen sink.”
Questions I Had During The Scripts Creation
- What should the IT department know about user account password statuses? Are there any impending expirations or existing expirations unknown to the user?
- Does the user know their password might expire during extended off-periods, such as the December holidays?
- Are there barriers to the user changing their password?
- Are there account issues post user onboarding, like never setting a personal password?
- How can a user be proactive about password changes?
- Is the user informed about changing passwords remotely or within the trusted local network?
It’s also important to recognize that there is a Microsoft-supported avenue for domain-joined users to reset their password, expired or not. However, unfortunately it’s part of the Remote Desktop Web Access (“RDWeb”) feature, part of the larger Terminal Services server role, which may require client access licensing, depending on your setup.
To summarize, the plethora of existing scripts fell short of my expectations, prompting me to create a more holistic “everything but the kitchen sink” solution. This one has a Kitchen Sink included, so you, as an administrator will never be left in the dark to support your senior-level executives.
Be the first to comment on this post!
Your personal data is secure.
Learn about how your information is collected, used, and securely stored in the Privacy Policy.