0
点赞
收藏
分享

微信扫一扫

检查AD账号认证失败次数并发送邮件至管理员

目标: 

    检查AD中用户认证失败的次数,哪些用户已经锁定,哪些用户即将锁定,可以主动提醒用户。 

脚本内容如下:


Import-Module ActiveDirectory


$list = Get-ADUser -SearchBase ";ou=employees,ou=staff,dc=123,dc=com" -Properties * -Filter {BadLogonCount -gt 8}  -ResultPageSize 10000 | % {$_.SamAccountName} 


$Report = @() ## 定一个空数组

Foreach ($i in $list){
     $userinfo = Get-ADUser -id $i -Properties DisplayName,SamAccountName,AccountLockoutTime,BadLogonCount
     $DisplayName = $userinfo.DisplayName
     $SamAccountName = $i
     $AccountLockoutTime = $userinfo.AccountLockoutTime
     $BadLogonCount = $userinfo.BadLogonCount
  
## 自定义个PS对象遍历存储所有用户信息
     $Report += New-Object -TypeName psobject -Property @{
        SamAccountName = $SamAccountName
        DisplayName = $DisplayName
        AccountLockoutTime = $AccountLockoutTime
        BadLogonCount =  $BadLogonCount
      }
}

$Report = $Report | Sort-Object -Descending BadLogonCount

## 定义一个数据表
$DataTable = New-Object System.Data.DataTable "DataTable"
$col1 = New-Object system.Data.DataColumn DisplayName,([string])
$col2 = New-Object system.Data.DataColumn SamAccountName,([string])
$col3 = New-Object system.Data.DataColumn AccountLockoutTime,([string])
$col4 = New-Object system.Data.DataColumn BadLogonCount,([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.DisplayName = $entry.DisplayName
    $row.SamAccountName = $entry.SamAccountName
    $row.AccountLockoutTime = $entry.AccountLockoutTime
    $row.BadLogonCount = $entry.BadLogonCount
    $DataTable.Rows.Add($row)

}

#Write-Output $DataTable.Rows

## 构造html表头

$HtmlTable = "<table ;border=&#39;1' align='Left' cellpadding='2' cellspacing='0' style='color:black;font-family:arial,helvetica,sans-serif;text-align:left;'>
<tr style =&#39;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=&#39;font-size:12px;background-color:#FFFFFF'>
    <td>" + $row.DisplayName + "</td>
    <td>" + $row.SamAccountName + "</td>
    <td>" + $row.AccountLockoutTime + "</td>
    <td>" + $row.BadLogonCount + "</td>
    </tr>"

}
## 表尾
$HtmlTable += "</table>"
#Write-Output $HtmlTable

Function SendEmail  {
     $From = "shi.zhenning@hello.com"
     $To = "shi.zhenning@hello.com"
     $Subject = "AD账号认证失败次数通知" 
     $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
    



通过任务计划定期执行。 

效果:

检查AD账号认证失败次数并发送邮件至管理员_AD账号认证失败次数


举报

相关推荐

0 条评论