По сути, у меня есть скрипт, который сканирует импортируемый им CSV-файл и для каждой записи в электронной таблице, за исключением людей в RANDOM.DOMAIN, находит адрес электронной почты менеджера и отправляет автоматическое электронное письмо на адрес менеджер говорит им, что срок действия пользователя XYZ скоро истечет, и им нужно что-то с этим сделать.
Если электронная почта менеджера по какой-либо причине недоступна, то по умолчанию она отправляет электронное письмо мне. Этот скрипт работает хорошо.
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу сделать так, чтобы каждому менеджеру отправлялось только одно электронное письмо, несмотря на то, что несколько пользователей (или записей) из электронной таблицы перечисляют их как менеджера.
т.е. если у Джо Блоггса есть менеджер Аарон Т, а у Джейн Доу есть менеджер Аарон Т, то Аарон Т получит два электронных письма, по одному для каждого пользователя.
МОЙ ВОПРОС:
Есть ли простой способ заставить его отправлять только одно электронное письмо каждому менеджеру, даже если у этого менеджера есть несколько пользователей, сообщающих им, срок действия которых истекает?
$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 "[email protected]" `
-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
}
ОБНОВЛЕНО с новым скриптом по запросу.... все еще есть проблемы.
Есть ли простой способ заставить его отправлять только одно электронное письмо каждому менеджеру, даже если у этого менеджера есть несколько пользователей, сообщающих им, срок действия которых истекает?