我正在创建一个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”的位置参数
答案 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。