如何收集循环中的所有AD用户并放入邮件正文中?

How to collect all AD users in the loop and put them in the email body?

以下是我的资料:

$DisabledUsers = Get-ADUser -Filter {Enabled -eq $false} -SearchBase 'OU=Users,OU=example,DC=local' 
foreach ($DisabledUser in $DisabledUsers){
    $DisabledUser.Name+';'
    Move-ADObject -Identity $DisabledUser -TargetPath 'OU=Disabled Object,OU=abc,DC=local'
}
write-host $DisabledUser

Send-MailMessage `
                -From 'Disabled Users <no-reply@ioh.ie>' `
                -To 'me <me@abc.ie>' `
                -Subject 'Disabled User(s) moved to OU=Disabled Object,OU=abc,DC=local' `
                -Body $DisabledUser `
                -SmtpServer "192.168.1.1" `
                -Port "25"

谁能告诉我正确的方向?

根据您分享的代码,好像是

-Body $DisabledUser

应该是

-Body $DisabledUsers

显示您的代码在何处使用了错误的变量放入电子邮件正文中。

但是,从循环中输出 $DisabledUser.Name+';' 并不是您想要的,因为这只会写入控制台,因为您没有捕获它作为结果。
再一次,你为什么要这么做,因为你已经在变量 $DisabledUsers 中有了禁用用户的数组,而你所需要的只是一个带有用户名的字符串数组,这样你就可以将它加入到合适的正文中。

对带有大量参数的 cmdlet 使用反引号也需要重新考虑。
最好使用 Splatting 使代码更 robust/readable

尝试

$DisabledUsers = Get-ADUser -Filter "Enabled -eq $false" -SearchBase 'OU=Users,OU=abc,DC=local' 
foreach ($user in $DisabledUsers) {
    $user | Move-ADObject -TargetPath 'OU=Disabled Object,OU=abc,DC=local'
}

# Use Splatting for better readability (and get rid of using the nasty backticks)
$mailProps = @{
    From       = 'Disabled Users <no-reply@ioh.ie>'
    To         = 'me <me@abc.ie>'
    Subject    = 'Disabled User(s) moved to OU=Disabled Object,OU=abc,DC=local'
    Body       = ($DisabledUsers.Name -join [environment]::NewLine)  # join with any character you like
    SmtpServer = '192.168.1.1'
    Port       = 25
}
Send-MailMessage @mailProps

P.S。 Get-ADUser的-Filter参数其实是一个字符串,不是脚本块