Send-MailMessage - 来自参数错误?

时间:2017-04-02 00:39:59

标签: powershell

我尝试使用PowerShell使用以下命令发送邮件:

powershell -command "& {Send-MailMessage -To "xxxxx@xx.com" -From "xxxx@domain.com" -SMTPServer xxx.xx.com -Subject "report" -Body "service is running"}"

但我收到此错误:

Send-MailMessage : A positional parameter cannot be found that accepts argument
'xxx@xx.com'.
At line:1 char:20
+ & {Send-MailMessage <<<<  -To "xxx@xx.com -From "xxx@xx.com -SMTPServer xxxx.xx.com -Subject "Daily report" -Body "service is running"}
    + CategoryInfo          : InvalidArgument: (:) [Send-MailMessage], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.SendMailMessage

1 个答案:

答案 0 :(得分:1)

正如其他人已经提到的那样,你的报价被打破了。您试图在双引号字符串中嵌套双引号而不转义它们。未转义的嵌套双引号会过早地终止您的字符串,从而导致您观察到的错误。

这个问题最简单的解决方法是用单引号替换嵌套的双引号,因为你似乎没有在该命令中使用变量:

powershell.exe -Command "& {Send-MailMessage -To 'xxxxx@xx.com' -From ..."

如果你想继续使用嵌套的双引号(例如,因为你的scriptblock中有变量,不会在单引号字符串中扩展),你需要转义它们。如果您从PowerShell外部运行命令(例如从CMD运行),您可以使用反斜杠来执行此操作:

powershell.exe -Command "& {Send-MailMessage -To \"xxxxx@xx.com\" -From ..."

如果从PowerShell中运行命令,则需要两次转义嵌套双引号(一次用于PowerShell解析命令行,一次用于实际命令调用):

powershell.exe -Command "& {Send-MailMessage -To \`"xxxxx@xx.com\`" -From ..."

但是,如果您实际上是从PowerShell运行它,则首先不需要powershell.exe -Command。只需直接调用Send-MailMessage

Send-MailMessage -To "xxxxx@xx.com" -From ...