Fromとtoのアドレスが常に同じになるように、特別な目的(エラーメッセージ)のための小さなPowerShell send-email-functionを記述しました!
Function Send-EMail {
Param (
[Parameter(Mandatory=$true)] [String]$EmailTo = "[email protected]", # default
[Parameter(Mandatory=$true)] [String]$EmailFrom = "[email protected]", #default
[Parameter(Mandatory=$true)] [String]$Subject,
[Parameter(Mandatory=$true)] [String]$Body,
[Parameter(mandatory=$false)] [String]$Attachment,
[Parameter(mandatory=$true)] [String]$Password
)
$SMTPServer = "smtp.gmail.com"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
if ($attachment -ne $null) {
$SMTPattachment = New-Object System.Net.Mail.Attachment($attachment)
$SMTPMessage.Attachments.Add($STMPattachment)
}
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($EmailFrom.Split("@")[0], $Password);
$SMTPClient.Send($SMTPMessage)
Remove-Variable -Name SMTPMessage
Remove-Variable -Name SMTPClient
Remove-Variable -Name Password
Remove-Variable -Name Body
Remove-Variable -Name Subject
} #End Function Send-EMail
....
$subj = "Subject"
$body = @" Body-Text "@
Send-EMail -Subject $subj -Body $body -Password "myPWD" -Attachment $logFile
これで電子メールアドレスを再度指定する必要がないことが期待されますが、ISEデバッガーで行ごとに実行すると、EmailToアドレスを要求する小さなウィンドウが開きます。
既に指定されているアドレスを要求されないようにするには、何を変更する必要がありますか?
Mandatory
パラメータ属性フラグ:
[Parameter(Mandatory=$true)]
「呼び出し元がこのパラメーターに引数を指定することは必須です」という意味です。
パラメータをparamブロックで指定したデフォルト値に戻す場合は、Mandatory
フラグを$false
に設定します。
[Parameter(Mandatory=$false)]
[string]$EmailTo = "[email protected]",
これは少し直感に反するように思えるかもしれませんが、ユーザーが必要なパラメーターを提供しなかったときにそれを検出できます。
if(-not($PSBoundParameters.ContainsKey('EmailTo')) -and $EmailTo)
{
# User relied on default value
}