janikvonrotz
9/11/2013 - 9:22 AM

PowerShell: Get Active Directory User Password Report #PowerShell #ActiveDirectory

PowerShell: Get Active Directory User Password Report #PowerShell #ActiveDirectory

# Users which don't have password expiration enabled

Get-ADUser -Filter{Enabled -eq $True -and PasswordNeverExpires -eq  $true} -SearchBase "OU=vblusers2,DC=vbl,DC=ch"  -Properties lastLogonTimestamp, pwdLastSet, displayName |
foreach{$_ | Select-Object -Property Name, UserPrincipalName, displayName, `
@{Name = "lastLogonTimestamp";Expression = {[DateTime]::FromFileTime($_.lastLogonTimestamp)}}, `
@{Name = "pwdLastSet";Expression = {[DateTime]::FromFileTime($_.pwdLastSet)}} } |
Out-GridView
# custom report with user password expires and never expires

$DaysUntilExpiration = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days

$DaysUntilExpirationForUserPasswordNeverExpires = $DaysUntilExpiration  + 90

if($DaysUntilExpiration -le 0){throw "Domain 'MaximumPasswordAge' password policy is not configured."}

Get-ADGroupMember "F_Mitarbeiter" -Recursive | 

Get-ADUser -Properties Enabled, lastLogonTimestamp, PasswordNeverExpires, PasswordLastSet, Mail, DisplayName |

Select-Object *, @{L="PasswordExpirationDays";E={
    if($_.PasswordNeverExpires){
        $DaysUntilExpirationForUserPasswordNeverExpires - ((Get-Date) - ($_.PasswordLastSet)).Days  
    }else{    
        $DaysUntilExpiration - ((Get-Date) - ($_.PasswordLastSet)).Days
    }
}} |

Select-Object *, @{L="PasswordExpirationDate";E={Get-Date (Get-date).AddDays($_.PasswordExpirationDays) -Format d}},

@{Name = "lastLogonTimestampDate";Expression = {[DateTime]::FromFileTime($_.lastLogonTimestamp)}} |

Where-Object{($_.Enabled -eq $true)} |

Select-Object DisplayName, Mail, PasswordNeverExpires, PasswordExpirationDays, PasswordExpirationDate, PasswordLastSet, lastLogonTimestampDate | 

Out-GridView