清理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

 

总结

如有其他疑问,欢迎提出

你可能感兴趣的:(Directory,powershell,Active,ad)