スクリプトには、send-mailmessage コマンドレットをまとめて、各電子メールを送信する前に少しのロジックを実行する関数があります。
私の質問は、Cc、Bcc、および添付ファイルがオプションになるように、send-mailmessage にフィードする引数リストを作成する方法です。
私が以前に行ったことは、ほんの数個の if ステートメントです。しかし、ミックスに -Cc を追加すると、現在の 4 つの if ステートメントの代わりに 9 つの if ステートメントになります。
簡素化された機能:
Function Send-Email ($To, $Cc, $Bcc, $Subject, $From, $Body, $Attachments)
{
#Some more code goes here that sometimes modifies the incoming parameters
$EmailServer = my.mail.server
Try
{
#Need to add ability for $Cc to be optional
if ($Attachments -and $Bcc) {send-mailmessage -to $To -Cc $Cc -Bcc $Bcc -subject $Subject -From $From -body $Body -smtpserver $EmailServer -attachments $Attachments -ErrorAction "Stop"}
if ($Attachments -and -not $Bcc) {send-mailmessage -to $To -Cc $Cc -subject $Subject -From $From -body $Body -smtpserver $EmailServer -attachments $Attachments -ErrorAction "Stop"}
if ($Bcc -and -not $Attachments) {send-mailmessage -to $To -Cc $Cc -Bcc $Bcc -subject $Subject -From $From -body $Body -smtpserver $EmailServer -ErrorAction "Stop"}
if (-not $Attachments -and -not $Bcc) {send-mailmessage -to $To -Cc $Cc -subject $Subject -From $From -body $Body -smtpserver $EmailServer -ErrorAction "Stop"}
}
Catch [system.exception]
{
"Failed to send email to $($To) due to: $_" #Logging removed for SO example code
}
Finally
{}
}
引数を 1 つの長い文字列または文字列の配列として生成してから、invoke-expression を使用してみました。同じことを試しましたが、「&」記号を使用してコマンドレットを実行しました。
試してみると、シェルからパラメーターの入力を求められます。
PS E:\script> invoke-expression 'send-mailmessage $a'
cmdlet Send-MailMessage at command pipeline position 1
Supply values for the following parameters:
From:
PS E:\script> & send-mailmessage $a
cmdlet Send-MailMessage at command pipeline position 1
Supply values for the following parameters:
From:
$Cc を $Null、$False、または null 文字列 "" に設定しようとしましたが、send-mailmessage が無効なパラメータを訴えます。
ここで単純なものが欠けているように感じますが、私の考えでは、関数は次の無効な例のようになります。
Function Send-Email ($To, $Cc, $Bcc, $Subject, $From, $Body, $Attachments)
{
#Some more code goes here that sometimes modifies the incoming parameters
$EmailServer = my.mail.server
if ($Cc) {$CcArg = "-Cc $Cc"}
if ($Bcc) {$BccArg = "-Bcc $Bcc"}
if ($Attachments) {$AttachArg = "-Attachments $Attachments"}
Try
{
send-mailmessage -to $To ($CcArg) ($BccArg) -subject $Subject -From $From -body $Body -smtpserver $EmailServer $AttachArg -ErrorAction "Stop"
}
Catch [system.exception]
{
"Failed to send email to $($To) due to: $_" #Logging removed for SO example code
}
Finally
{}
}
ご意見やご提案をありがとうございます。