场景
定期查询AD中的用户,过滤出所有被锁定的账号,生成一个表格,并发送给IT同学。
实现
- 直接上脚本
## 查询所有锁定用户的SamAccountName
$account_locked = (Search-ADAccount -LockedOut -SearchBase "ou=employees,dc=123,dc=com" -ResultSetSize 1000).SamAccountName
##
$Report = @() ## 定一个空数组
Foreach ($i in $account_locked){
$userinfo = Get-ADUser -id $i -Properties Name,SamAccountName,DisplayName,mail,LastLogonDate
$displayname = $userinfo.DisplayName
$email = $userinfo.mail
$samaccount = $i
$lastlogondate = $userinfo.LastLogonDate
## 自定义个PS对象遍历存储所有用户信息
$Report += New-Object -TypeName psobject -Property @{
SamAccountName = $samaccount
DisplayName = $displayname
Email = $email
LastLogonDate = $lastlogondate
}
}
$Report = $Report | Sort-Object LastLogonDate
## 定义一个数据表
$DataTable = New-Object System.Data.DataTable "DataTable"
$col1 = New-Object system.Data.DataColumn LogonName,([string])
$col2 = New-Object system.Data.DataColumn DisplayName,([string])
$col3 = New-Object system.Data.DataColumn Email,([string])
$col4 = New-Object system.Data.DataColumn LastLogonDate,([string])
## 增加列
$DataTable.Columns.Add($col1)
$DataTable.Columns.Add($col2)
$DataTable.Columns.Add($col3)
$DataTable.Columns.Add($col4)
## 增加数据行
foreach ($entry in $Report){
$row = $DataTable.NewRow()
$row.LogonName = $entry.SamAccountName
$row.DisplayName = $entry.DisplayName
$row.Email = $entry.Email
$row.LastLogonDate = $entry.LastLogonDate
$DataTable.Rows.Add($row)
}
#Write-Output $DataTable.Rows
## 构造html表头
$HtmlTable = "<table border='1' align='Left' cellpadding='2' cellspacing='0' style='color:black;font-family:arial,helvetica,sans-serif;text-align:left;'>
<tr style ='font-size:12px;font-weight: normal;background: #FFFFFF'>
<th align=left><b>登录名</b></th>
<th align=left><b>显示名</b></th>
<th align=left><b>邮箱</b></th>
<th align=left><b>后登陆日期</b></th>
</tr>"
## 构造html表体
foreach ($row in $DataTable)
{
$HtmlTable += "<tr style='font-size:12px;background-color:#FFFFFF'>
<td>" + $row.LogonName + "</td>
<td>" + $row.DisplayName + "</td>
<td>" + $row.Email + "</td>
<td>" + $row.LastLogonDate + "</td>
</tr>"
}
## 表尾
$HtmlTable += "</table>"
#Write-Output $HtmlTable
Function SendEmail {
$From = "shi.zhenning@hello.com"
$To = "shi.zhenning@hellog.com"
$Subject = "账号锁定通知"
$Body = $HtmlTable
$smtpServer = "mail.hello.com"
$smtpPort = 587
$username = "username"
$password = "password"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($From, $To, $Subject, $Body)
$SMTPMessage.IsBodyHTML=$true
$SMTPClient = New-Object Net.Mail.SmtpClient($smtpServer, $SmtpPort)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($username, $password);
$SMTPClient.Send($SMTPMessage)
}
SendEmail
- 看下效果