“Password’s expired” alert
Import-Module ActiveDirectory
#System globalization
#$ci = New-Object System.Globalization.CultureInfo(“ru-RU”)#SMTP server name
$smtpServer = “mail.domain.com”#Creating a Mail object
$msg = new-object Net.Mail.MailMessage
#Creating a Mail object for report
$msgr = new-object Net.Mail.MailMessage#Creating SMTP server object
$smtp = new-object Net.Mail.SmtpClient($smtpServer)#E-mail structure
Function EmailStructure($to,$expiryDate,$upn)
{
$msg.IsBodyHtml = $true
$msg.From = “admin@domain.com”
$msg.To.Clear()
$msg.To.Add($to)
$msg.Subject = “Password expiration notice”
$msg.Body = “<html><body><font face=’Arial’>This is an automatically generated message from Exchange service.<br><br><b>Please note that the password for your account <i><u>Domain\$upn</u></i> will expire on $expiryDate.</b><br><br>Please change your password immediately or at least before this date as you will be unable to access the service without contacting your administrator.<br></font></body></html>”}
Function EmailStructureReport($to)
{
$msgr.IsBodyHtml = $true
$msgr.From = “admin@domain.com”
$msgr.To.Add($to)
$msgr.Subject = “Script running report”
$msgr.Body = “<html><body><font face=’Arial’><b>This is a daily report.<br><br>Script has successfully completed its work.<br>$NotificationCounter users have recieved notifications:<br><br>$ListOfAccounts<br><br><br>Users with expired password:<br>$ListOfExpAccounts</br></b></font></body></html>”}
#Set the target OU that will be searched for user accounts
$OU = “DC=ou,DC=domain,DC=com”
write-host $OU
$ADAccounts = Get-ADUser -LDAPFilter “(objectClass=user)” -searchbase $OU -properties PasswordExpired, extensionAttribute15, PasswordNeverExpires, PasswordLastSet, Mail, Enabled | Where-object {$_.Enabled -eq $true -and $_.PasswordNeverExpires -eq $false}$NotificationCounter = 0
$ListOfAccounts = “”
$ListOfExpAccounts = “”Foreach ($ADAccount in $ADAccounts)
{
$accountFGPP = Get-ADUserResultantPasswordPolicy $ADAccount
if ($accountFGPP -ne $null)
{
$maxPasswordAgeTimeSpan = $accountFGPP.MaxPasswordAge
}
else
{
$maxPasswordAgeTimeSpan = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge
}#Fill in the user variables
$samAccountName = $ADAccount.samAccountName
$userEmailAddress = $ADAccount.mail
$userPrincipalName = $ADAccount.UserPrincipalNameif ($ADAccount.PasswordExpired)
{
Write-host “The password for account $samAccountName has expired!”
$ListOfExpAccounts = $ListOfExpAccounts + $samAccountName + “<br>”
}
else
{
$ExpiryDate = $ADAccount.PasswordLastSet + $maxPasswordAgeTimeSpan
$TodaysDate = Get-Date
$DaysToExpire = $ExpiryDate – $TodaysDate
#Calculating DaysToExpireDD to DD format (w/o fractional part and dot)
$DaysToExpireDD = $DaysToExpire.ToString() -Split (“\S{17}$”)
Write-host “The password for account $samAccountName expires on: $ExpiryDate.Days left: $DaysToExpireDD”
if (($DaysToExpire.Days -eq 15) -or ($DaysToExpire.Days -eq 7) -or ($DaysToExpire.Days -le 3))
{
$expiryDate = $expiryDate.ToString(“d”,$ci)
#Generate e-mail structure and send message
if ($userEmailAddress)
{
EmailStructure $userEmailAddress $expiryDate $samAccountName
$smtp.Send($msg)
Write-Host “NOTIFICATION – $samAccountName :: e-mail was sent to $userEmailAddress”
$NotificationCounter = $NotificationCounter + 1
$ListOfAccounts = $ListOfAccounts + $samAccountName + ” – $DaysToExpireDD days left. Sent to $userEmailAddress<br>”
}
}
}
}
Write-Host “SENDING REPORT TO IT DEPARTMENT”
EmailStructureReport(“admin@domain.com”)
$smtp.Send($msgr)
The original article: http://habrahabr.ru/post/204796/
iSCSI – be careful CMD: find a string and run another script