带有正文的 Powershell 发送邮件消息在批处理脚本中不起作用

Powershell send-mailmessage with body text not working in batch script

需要帮助将 PowerShell 命令批量转换为 运行。我可以得到以下 运行 罚款 .ps1:

$filecontent = Get-Content -path C:\temp\status.txt | Out-string
Send-MailMessage  -to   "tester@test.com"   -from   "ServerAdmin@test.com"  -subject "STATUS: PASS"      -body "$filecontent" -smtpServer mail2.co.test.ca.us

当我把它放入一个批次时:

PowerShell  -command "$filecontent = Get-Content -path C:\temp\status.txt | Out-String" ^
Powershell  -command Send-MailMessage        ^
    -to      \"tester@test.com\"        ^
    -from    \"ServerAdmin@test.com\"       ^
    -subject \"STATUS: PASS \"      ^
    -body    \"$filecontent\" ^
    -smtpServer     mail2.co.test.ca.us

我收到这个错误:

Out-String : A positional parameter cannot be found that accepts argument 'Send-MailMessage'.
At line:1 char:55
+ ... tatus.txt | Out-String Send-MailMessage -to "tester@test.com" -from " ...
    + CategoryInfo          : InvalidArgument: (:) [Out-String], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.OutStringCommand

批量执行此操作的唯一方法是将原始 PowerShell 语法放入 .ps1 并从批处理中调用它吗?发送邮件部分工作正常。尝试了不带 " 和 -Raw 的 $filecontent 行,而不是管道和 Out-string。

您应该尝试将其放在一个命令中:

PowerShell  -command "$filecontent = Get-Content -path d:\temp\status.txt | Out-String; Send-MailMessage -to \"tester@test.com\" -from \"ServerAdmin@test.com\" -subject \"STATUS: PASS \"  -body \"$filecontent\" -smtpServer     mail2.co.test.ca.us"

因为在第二个命令中$filecontent不再存在。