首页 > 解决方案 > 如何在 AD 中删除计算机并将已删除的计算机通过电子邮件发送给自己

问题描述

我正在尝试从 AD 中删除 txt 文件中的机器列表。将它们删除我没有问题。但是,一旦它们被删除,我希望 PowerShell 向我的小组发送电子邮件,说这些机器已从 AD 中删除。谁能提供一些帮助?

我已经尝试过 If、try 和 statements,但似乎无法使其正常工作。

Get-Content 'c:\temp\Remove AD Computers.txt' | % { Get-ADComputer -Filter { Name -eq $_ } } | Remove-ADObject -Recursive -Whatif

$Computerlist = Get-Content 'c:\temp\Remove AD Computers.txt'

ForEach($Computer in $Computerlist)
{ 
   try{
        Get-ADComputer $Computer -ErrorAction Stop
        $output = "$Computer still exsists in AD."
}
   catch{
   $output = "$Computer has been removed from AD." 
}
}
Write-Host $output

Send-MailMessage -From 'ADComputersRemoved@redgold.com' -To 'support@redgold.com' -Subject 'AD Computers removed' -Body "$output" -SmtpServer smtp.domain.com

我需要这个来移除计算机,然后将移除结果通过电子邮件发送给我。希望这是足够的信息。任何帮助都会很棒。

标签: powershellactive-directory

解决方案


如果你像下面这样修改你的 foreach 循环,你的所有计算机都会在列表中。每次循环迭代都会向$output数组中添加一个索引元素,其值为两个字符串之一。

$output = ForEach($Computer in $Computerlist)
{ 
   try{
        Get-ADComputer $Computer -ErrorAction Stop
        "$Computer still exsists in AD."
}
   catch{
   "$Computer has been removed from AD." 
}
}

由于$output将是一个字符串数组,因此当您将其传递-bodySend-MailMessage. 我使用-join带有 CRLF 字符的运算符。你可以使用任何你喜欢的东西。$output | out-string将完成类似的事情。

Send-MailMessage -From 'ADComputersRemoved@redgold.com' -To 'support@redgold.com' -Subject 'AD Computers removed' -Body ($output -join "`r`n") -SmtpServer smtp.redgold.com

推荐阅读