Add Audit-SPNAccounts.ps1
This commit is contained in:
31
Audit-SPNAccounts.ps1
Normal file
31
Audit-SPNAccounts.ps1
Normal file
@ -0,0 +1,31 @@
|
||||
# Requires: RSAT (ActiveDirectory module)
|
||||
|
||||
# Define password age threshold (in days)
|
||||
$MaxPasswordAgeDays = 365
|
||||
$Now = Get-Date
|
||||
|
||||
# Get all users with an SPN set
|
||||
$spnAccounts = Get-ADUser -Filter {ServicePrincipalName -like "*"} `
|
||||
-Properties ServicePrincipalName, PasswordLastSet, DoesNotRequirePreAuth
|
||||
|
||||
$results = foreach ($acct in $spnAccounts) {
|
||||
$passwordAge = ($Now - $acct.PasswordLastSet).Days
|
||||
|
||||
[PSCustomObject]@{
|
||||
Name = $acct.SamAccountName
|
||||
SPNs = ($acct.ServicePrincipalName -join ", ")
|
||||
PasswordLastSet = $acct.PasswordLastSet
|
||||
PasswordAgeDays = $passwordAge
|
||||
RequiresPreAuth = -not $acct.DoesNotRequirePreAuth
|
||||
PasswordStale = $passwordAge -gt $MaxPasswordAgeDays
|
||||
Risky_NoPreAuth = $acct.DoesNotRequirePreAuth
|
||||
}
|
||||
}
|
||||
|
||||
# Output as table
|
||||
$results | Sort-Object PasswordAgeDays -Descending | Format-Table -AutoSize
|
||||
|
||||
# Optional: Export to CSV for further review
|
||||
$results | Export-Csv -Path ".\SPN_Audit_Report.csv" -NoTypeInformation
|
||||
|
||||
Write-Host "`nAudit complete. Results saved to SPN_Audit_Report.csv." -ForegroundColor Green
|
||||
Reference in New Issue
Block a user