清理AD過期對象,並將結果發送給指定管理員

需求

需求爲清理AD中過期的帳號,本打算是直接清理90天未登錄的帳號就可以了,結果領導又擔心如果一些長期出差在外的人員怎麼辦,所以後面加了一個30天的郵箱判定,如果這個人90天未登錄域,又30天未登錄郵箱,那應該是可以清的了

 

操作

直接上正文,裏面有註釋

#加域AD模塊
Import-Module ActiveDirectory
#加載Exchange模塊
Add-PSSnapin Microsoft.Exchange.Management.Powershell.E2010
#定義90天的值
$When1 = (Get-Date).AddDays(-90).ToFileTime()
#定義30天的時間值
$When2 = (Get-Date).AddDays(-30).Date
#提取出超過90天未登錄域的計算機列表
$PC = Get-ADComputer -Filter {LstLogontimeStamp -lt $When1 } -SearchBase "OU=test01,DC=dztest,DC=com"
#禁用並移動過期計算機帳號
$PC | Set-ADObject -ProtectedFromAccidentalDeletion:$false | Disable-ADAccount | Move-ADObject -ErrorAction SilentlyContinue -TargetPath "OU=Test02,DC=dztest,DC=com"
#獲取超過90天未登錄域的用戶列表
$user = Get-ADUser -Filter {LastLogonTimeStamp -lt $When1} -SearchBase "OU=test01,DC=dztest,DC=com" -Properties * | Select-Object Name,SamAccountName,Mail
#篩選出沒有郵箱的用戶
$user1 = $user | where{$_.mail -eq $null}
#篩選出有郵箱的用戶
$user2 = $user | where{$_.mail -ne $null}
#直接將沒有郵箱的用戶移動到指定的OU中並禁用
$user1 | Set-ADObject -ProtectedFromAccidentalDeletion;$false | Disable-ADAccount | Move-ADObject -ErrorAction SilentlyContinue -TargetPath "OU=test02,DC=dztest,DC=com" 
#在結果中篩選出超過30天未登錄郵箱的用戶
$Euser = $user2.mail | Get-MailboxStatistics | Where-Object {$_.lastlogontime -lt $when2} | Select-Object DisPlayName,LastLogontime
#反查AD帳號信息
$user3 = $euser.displayname | Get-Mailbox | Select Name,SamAccountName
#將結果用戶移動到指定的OU並禁用
$user3 | Set-ADObject -ProtectedFromAccidentalDeletion:$false | Disable-ADAccount |  Move-ADObject -ErrorAction SilentlyContinue -TargetPath "OU=test02,DC=dztest,DC=com"
#將超過90天未登錄域且無郵箱的對象,或超過90天未登錄到域,且超過30天未登錄郵箱的用戶操作結果發郵件給管理員
#發件人
$from = "test01.dztest.com"
#收件人
$to = "[email protected]"
#抄送,如密送可以用BCC
#$cc = ""
#SMTP服務器地址
$smtp = "mail.dztest.com"
#郵件主題
$subject = "Powershell Send Mail Test"
#郵件正文
$body = "
此次禁用超過90天未登錄域且無郵箱用戶爲:
$($user1 | Out-String)
此次禁用超過90天未登錄域且30天未登錄郵箱用戶爲:
$($user3 | Out-String)
"
#附件
#$attachment = "e:\1.txt"
安全憑證
secpasswd = ConvertTo-SecureString "password" -AsPlainText -Force
mycreds = New-Object System.Management.AutoMation.PSCredential ($from,$secpasswd)
#發送郵件
Send-MailMessage -To $to -From $from -Subject $subject -Body $body -Credential $mycreds -SmtpServer $smtp -DeliveryNotificationOption Never -Encoding UTF8

 

總結

如有其他疑問,歡迎提出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章