发送电子邮件时,在-Body中添加变量

时间:2019-07-17 12:00:02

标签: powershell

我正在创建一个PowerShell脚本,以使我们的启动者和离开者过程更加流畅。我们有一个单独的团队,需要添加某些帐户。

我想做的就是获取在脚本开始处声明的变量,新用户名,并将其放在电子邮件中,要求其他部门设置它们。

$username = "joe"

Send-MailMessage -SmtpServer smtp.office365.com -From "it@support.com" -To "other@department.com" -Subject 'Starter/Leaver ' -Body "Hi department, `n `nPlease can you add/remove" $username "from the necessary account please `n `nThanks"

我收到一条错误消息:

  

Send-MailMessage:找不到一个接受参数“ joe”的位置参数

1 个答案:

答案 0 :(得分:0)

这里的问题是发送到-Body的字符串对象因引用而损坏。您可以使用一组引号将整个身体包围起来,以获得所需的结果。

$username = "joe"

Send-MailMessage -SmtpServer smtp.office365.com -From "it@support.com" -To "other@department.com" -Subject 'Starter/Leaver ' -Body "Hi department, `n`nPlease can you add/remove $username from the necessary account please `n`nThanks"

更整洁的人:

我知道这个答案并不那么简洁,但是它更具可读性并且增加了灵活性。它使用here-string创建正文,而无需添加所有换行字符。它还使用splatting执行命令。使用splatting,您只需要在需要更改某些内容时更新哈希表即可。

$Body = @"
Hi department,

Please can you add/remove $username from the necessary account please 

Thanks
"@

$Message = @{ SmtpServer = 'smtp.office365.com'
              From = "it@support.com"
              To = "other@department.com"
              Subject = 'Starter/Leaver'
              Body = $Body
           }

Send-MailMessage @Message

运行PowerShell命令时,参数以空格分隔。如果使用Send-MailMessage,则还允许使用位置参数,这意味着在传递值时不必提供参数名称。在尝试中,您的第一个引号对已传递给-Body参数。在第一个结束引号之后,将解释一个空格,后跟$username。由于为命令启用了位置参数,因此PowerShell尝试将$username分配给参数,但失败。当然,这也意味着,如果您打算在字符串中包含空格,则必须用引号将其引起来。

其他阅读内容:

有关参数如何工作的概述,请参见About Parameters
有关飞溅的信息,请参见About Splatting