You can use this script to query the HaveIBeenPwned database with your on-premises and Office 365 Active Directory user accounts.  It's based on the reference API, and allows you to output a CSV of potentially breached accounts.  When querying your accounts, you can select AD, Office 365, or both.  Additionally, you can choose whether or not to include Azure AD guests (when querying AAD).

Use the -ActiveDirectory parameter to only run against AD, and use the -Office365 parameter to only run against Office 365.  Default will attempt to run against Office 365 only.

You can see examples of usage and more at and


Check accounts in Active Directory and Office 365 against database 
.PARAMETER ActiveDirectory 
Choose to run against Active Directory 
.PARAMETER BreachedAccountOutput 
CSV filename for any potentially breached accounts 
.PARAMETER Credential 
Standard Credential Object generated via $credential = Get-Credential 
.PARAMETER Identity 
One or more identities (in the form of user@domain.tld). 
.PARAMETER ImportUsers 
Import a list of users to check against database. 
.PARAMETER IncludeGuests 
If querying Office 365, choose if you want to include external guests. Otherwise 
only objects with type MEMBER are selected. 
.PARAMETER InstallModules 
Choose if you want to install MSOnline and supporting modules. 
Output log file name. 
.PARAMETER Office365 
Choose to run against Office 365. 
Set the sleep time in milliseconds between API query attempts. Default is 1500. 
.\pwncheck.ps1 -Identity 
Run Pwncheck on a particular identity. 
.\pwncheck.ps1 -Office365 -Credential $cred 
Run Pwncheck against an Office 365 tenant with the credential stored in $cred. 
.\pwncheck.ps1 -Office365 -IncludeGuests -Credential $cred 
Run Pwncheck against an Office 365 tenant (including guest accounts) with the  
credential stored in $cred. 
.\pwncheck.ps1 -ActiveDirectory -Office365 -Credential $cred 
Run Pwncheck against Active Directory and Office 365 tenant with credentials 
stored in $cred. 
.\pwncheck.ps1 -ImportUsers userlist.txt 
Run Pwncheck against imported user list.  You can specify a file with either a 
header of 'userprincipalname' or a file with no header at all. 
2019-06-11 - Updated header check. 
             Updated to add Identity parameter. 
             Added examples. 
              Updated default parameter to identity, and configured to display 
              Get-Help $($MyInvovation.Line).ToString() -Examples to show help 
              data if no identity was specified. 
2019-05-10 - Updated header check and output. 
2019-05-09 - Updated to allow importing users from CSV and customizable timeout. 
2019-02-09 - Updated console output wording. 
2018-12-19 - Original release.