У меня есть этот простой скрипт:
param([string[]]$to="markk", $subject=$null, $body=$null, $from="name", $suffix="@example.com", $server="dev-builder")
function NormalizeAddress([string]$address)
{
if ($address -notmatch "@")
{
$address = $address + $suffix
}
$address
}
if (! $subject)
{
$subject = [DateTime]::Now
}
$from = NormalizeAddress $from
$to = $to | % { NormalizeAddress $_ }
Send-MailMessage -To $to -Subject $subject -From $from -Body $body -SmtpServer $server
Он написан таким образом, что его можно запустить без каких-либо аргументов, и в этом случае тестовое сообщение будет отправлено автору (мне).
В настоящее время сценарий завершается ошибкой, поскольку передача $null
в аргументе -Body
недопустима:
Send-MailMessage : Impossible de valider l'argument sur le paramètre « Body ». L'argument est null ou vide. Indiquez un argument qui n'est pas null ou vide et réessayez.
Au niveau de C:\Work\hg\utils\SendEmail.ps1 : 19 Caractère : 61
+ Send-MailMessage -To $to -Subject $subject -From $from -Body <<<< $body -SmtpServer $server
+ CategoryInfo : InvalidData: (:) [Send-MailMessage], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SendMailMessage
У меня есть три возможных решения:
- Два
Send-MailMessage
оператора команды:
if ($body)
{
Send-MailMessage -To $to -Subject $subject -From $from -Body $body -SmtpServer $server
}
else
{
Send-MailMessage -To $to -Subject $subject -From $from -SmtpServer $server
}
- Использование
Invoke-Expression
:
$expr = "Send-MailMessage -To `"$to`" -Subject `"$subject`" -From `"$from`" -SmtpServer `"$server`""
if ($body)
{
$expr = "$expr -Body `"$body`""
}
Invoke-Expression $expr
- Имитация пустого тела с одним пробелом:
if (! $body)
{
$body = " "
}
Send-MailMessage -To $to -Subject $subject -From $from -Body $body -SmtpServer $server
Все эти решения выглядят плохо для меня, потому что все они пахнут просто взломами. Я, должно быть, здесь упускаю что-то действительно простое, поэтому мой вопрос в том, как я могу пропустить пустое тело, не прибегая к этим взломам?
Спасибо.