Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell:如何传递空正文以发送邮件消息?_Powershell - Fatal编程技术网

Powershell:如何传递空正文以发送邮件消息?

Powershell:如何传递空正文以发送邮件消息?,powershell,Powershell,我有一个简单的脚本: 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 }

我有一个简单的脚本:

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
它是这样写的,这样就可以在没有任何参数的情况下运行它,在这种情况下,测试消息将发送给作者(我)

当前脚本失败,因为不允许在
-Body
参数中传递
$null

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

  • 使用
    调用表达式


  • 使用单个空格字符模拟空实体:


所有这些解决方案在我看来都很糟糕,因为它们都有一股黑客的味道。我一定是缺少了一些基本的东西,所以我的问题是,我如何才能在不借助这些黑客的情况下通过这个空的身体呢

谢谢。

您可以使用“splat”变量间接传递参数:

$extraParams = @{}
if (-not [String]::IsNullOrEmpty($body)) {
  $extraParams['Body'] = $body
}

Send-MailMessage -To $to -Subject $subject -From $from -SmtpServer $server @extraParams

请注意使用
@
传递参数名称参数值对的哈希表(当然,您可以通过这种方式传递所有参数,例如在初始化
$extraParams
时)。
发送邮件消息
cmdlet可以发送电子邮件,而无需指定正文参数。另一方面,如果您指定了一个值,那么它不能为空或null(参数ValidateNotNullOrEmpty上有一个validation属性)。因此,解决方案是创建参数名称和值的哈希表(也称为splatting)并将其传递给底层cmdlet:

 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
 }

 $param = @{
    from=NormalizeAddress $from
    to = $to | foreach { NormalizeAddress $_ }
    subject = $subject
    smtpserver = $server    
 }

 # if body is not empty or null - add it to the hastable
 if( ![String]::IsNullOrEmpty($body) ) {$param['body']=$body}

 Send-MailMessage @param

如果IsNullOrEmpty的值为真,您就不想添加“Body:)@ShayLevy我知道我写这篇文章时在想
-不是
,但显然计算机没有:-)修复。
if (! $body)
{
  $body = " "
}
Send-MailMessage -To $to -Subject $subject -From $from -Body $body -SmtpServer $server
$extraParams = @{}
if (-not [String]::IsNullOrEmpty($body)) {
  $extraParams['Body'] = $body
}

Send-MailMessage -To $to -Subject $subject -From $from -SmtpServer $server @extraParams
 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
 }

 $param = @{
    from=NormalizeAddress $from
    to = $to | foreach { NormalizeAddress $_ }
    subject = $subject
    smtpserver = $server    
 }

 # if body is not empty or null - add it to the hastable
 if( ![String]::IsNullOrEmpty($body) ) {$param['body']=$body}

 Send-MailMessage @param