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):

テスト値が配列などのコレクションである場合、コレクション内の各項目は出現順に評価されます。

代わりに通常の条件を使用します (とにかく 2 つのケースしかないため)。

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 に答える