【发布时间】:2014-04-25 18:24:06
【问题描述】:
所以基本上,我这里有一个脚本,它将扫描它导入的 CSV,并且对于电子表格中的每个条目,除了 RANDOM.DOMAIN 中的人,它会找到经理的电子邮件地址并自动发送向经理发送电子邮件,告诉他们用户 XYZ 即将到期,他们需要对此采取措施。
如果经理的电子邮件由于某种原因不可用,则默认将电子邮件发送给我。 该脚本运行良好。
我遇到的问题是,我想让每个经理只发送一封电子邮件,尽管电子表格中有多个用户(或条目),但将他们列为经理。
即如果 Joe Bloggs 有经理 Aaron T,而 Jane Doe 有经理 Aaron T,那么 Aaron T 将收到两封电子邮件,每个用户一封电子邮件。
我的问题:
是否有一种简单的方法可以让它只为每个经理发送一封电子邮件,即使该经理有多个用户向他们报告即将过期?
$datai = Import-Csv "Soon-to-expire User Accounts22.csv" | select 'Display Name',Manager,'Domain Name','Account Expiry Time'
Connect-QADService -Service another.DC | Out-Null
$expiringUsers = @{}
foreach ($i in $datai) {
$dn = $i.'Display Name'
$dn1 = $i.'Domain Name'
$man = $i.'Manager'
$aet = $i.'Account Expiry Time'
$subject = "Account about to expire: $dn"
$getmail = get-qaduser "$man" -LdapFilter '(mail=*)' | select mail
$emailAD = $getmail.mail
if ($man -eq "-" -or $man -like 'CN=*' -or $getmail -eq $null -or $man -eq "") {
$man = "Aaron T"
$getmail = get-qaduser "$man" -LdapFilter '(mail=*)' | select mail
$emailAD = $getmail.mail
}
if ($expiringUsers.Contains($emailAD)) {
$expiringUsers[$emailAD]["dn"] += $dn += "`n"
$expiringUsers[$emailAD]["aet"] += $aet += "`n"
$expiringUsers[$emailAD]["man"] += $man += "`n"
} else {
$expiringUsers[$emailAD] = @{
#"dn1" = $dn1
#"aet" = $aet
#"man" = $man
# "dn" = @( $dn )
}
}
}
$expiringUsers | fc #as suggested
foreach ($emailAD in $expiringUsers.Keys) {
$dn = $expiringUsers[$emailAD]["dn"]
$dn1 = $expiringUsers[$emailAD]["dn1"]
$man = $expiringUsers[$emailAD]["man"]
$aet = $expiringUsers[$emailAD]["aet"]
$subject = "Account/s About to Expire!"
$content = @"
Hi,
$dn `n
$dn1 `n
$man `n
$aet `n
$emailAD `n
Technology Services
"@
Send-MailMessage -from "aaron@website.com" `
-To $emailAD `
-Subject $subject `
-Body $content `
-Priority high `
-smtpServer "relay.server"
#using this as a test instead of sending mass emais all the time
Write-Host $content
}
已按要求使用新脚本进行了更新....仍有问题。
是否有一种简单的方法可以让它只为每个经理发送一封电子邮件,即使该经理有多个用户向他们报告即将过期?
【问题讨论】:
标签: powershell active-directory quest