我尝试使用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
答案 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 ...