如何收集循环中的所有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"
- write-host $DisabledUser 正在列出所有禁用的用户
- 但是 -Body $DisabledUser 只显示 1 个用户,循环中的最后一个
谁能告诉我正确的方向?
根据您分享的代码,好像是
-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
参数其实是一个字符串,不是脚本块
以下是我的资料:
$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"
- write-host $DisabledUser 正在列出所有禁用的用户
- 但是 -Body $DisabledUser 只显示 1 个用户,循环中的最后一个
谁能告诉我正确的方向?
根据您分享的代码,好像是
-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
参数其实是一个字符串,不是脚本块