2

我创建了一个脚本来配置 Lync 用户,需要通过电子邮件发送新配置的重要详细信息(例如分配的 LineURI)。此外,任何错误都需要发送(当然会被一些友好的错误消息弄得一团糟:))。

所以我创建了一些包含所有相关数据的 CSV。

然后我创建了一个函数:

Function Send-Email ($attachArray) {
    # Get a list of to addresses
    $toAddresses = "foo@corp.local","bar@corp.local"

    # Process replacments
    Replace-EmailMasks

    # Send conditionaly
    Switch ($attachArray) {
        $null {
            Send-MailMessage -SmtpServer "internalrelay.corp.local" `
                -From "test@andylab.local" -To $toAddresses `
                -Subject "There should really be something more informative here" `
                -BodyAsHTML $SCRIPT:htmlBody
            }

        Default {
            Send-MailMessage -SmtpServer "internalrelay.corp.local" `
                -From "test@andylab.local" -To $toAddresses `
                -Subject "There should really be something more informative here" `
                -BodyAsHTML $SCRIPT:htmlBody
                -Attachments $attachArray
        }
    }
}

这是我调用它的方式:

# Logic, then send
If (($npSuccess -gt 0) -AND ($errorsExist -gt 0)) {
    # Attaching both
        # Heres the summary paragraph
        $SCRIPT:customSummary = '<p>Success and errors :|</p>'
        # Now I'm sending it.
        Send-Email "$($tempPlace.fullname)\NewProviSsion_Output.csv","$($tempPlace.fullname)\Errors_Output.csv"
    } ElseIf ($npSuccess -gt 0) {..} # output-generating Success
        ElseIf ($errorsExist -gt 0) {..} # Failed somewhere
            Else {..} # no output-generating Success, no overall fails

现在这行得通;电子邮件看起来不错,应该发给谁,附加文件等。

问题是:
无论我在$attachArray中指定多少文件,这就是发送了多少电子邮件。电子邮件都完全相同,多次发送给同一个人。

就好像我正在这样做:

ForEach ($item in $attachArray) {
    Send-Email "$($tempPlace.fullname)\NewProviSsion_Output.csv","$($tempPlace.fullname)\Errors_Output.csv"
}

除了我不是..

为了澄清我的目标,我希望将电子邮件仅发送给 $toAddresses 中的所有人一次

谁能告诉我这里发生了什么?
也许我星期一早上过得很糟糕..

4

1 回答 1

1

switch语句为数组的每个元素触发。此行为已记录在案(检查Get-Help about_Switch):

如果测试值是一个集合,例如一个数组,则集合中的每个项目都按照它出现的顺序进行评估。

改用常规条件(因为无论如何你只有两种情况):

if ($attachArray -eq $null) {
  Send-MailMessage -SmtpServer "internalrelay.corp.local" `
    -From "test@andylab.local" -To $toAddresses `
    -Subject "There should really be something more informative here" `
    -BodyAsHTML $SCRIPT:htmlBody
} else {
  Send-MailMessage -SmtpServer "internalrelay.corp.local" `
    -From "test@andylab.local" -To $toAddresses `
    -Subject "There should really be something more informative here" `
    -BodyAsHTML $SCRIPT:htmlBody
    -Attachments $attachArray
}
于 2013-06-17T14:12:38.873 回答