$ Env:ComputerName不能与批处理文件中的powershell Send-MailMessage一起使用

时间:2017-07-05 09:51:16

标签: powershell email batch-file

经过大量的错误和编辑后,我得到Send-MailMessage来完成命令提示。下面的迭代发送完整的电子邮件。

powershell Send-MailMessage -From " `<user@domain>`" -To " `<user@domain.com>`" -Subject 'Some subject goes here' -Body 'Some body with alert regarding Host: $env:computername. List of deleted files is attached.' -Attachments 'C:\somefile.txt' -Priority High -dno onSuccess, onFailure -SmtpServer 'smtp.domain.com'

但是,这不会获取正文中的computername。我试过直接在powershell中运行这个命令,它与body中的computername变量一起使用。

  

为了让它简单地发送邮件,我已经尝试过了   powershell -command "command"powershell -command "{command}或   powershell -command "& {command}"等等,它甚至都没发送   发电子邮件。

由于我现在成功发送电子邮件,我需要在正文中包含Computername。

4 个答案:

答案 0 :(得分:3)

在参数值周围使用双引号以扩展变量。

即:

-Body "Some body with alert regarding Host: **$env:computername**. ..."

相关reading

答案 1 :(得分:1)

问题中的命令行和您自己的答案依赖于powershell当前具有默认(位置0)参数-Command的事实,
但是,这会从PowerShell 6.0.0beta3更改为-File

  • 您应该明确使用至少-C作为最短 -Command的缩写。
  • 加快执行我使用了addl参数-NoProfile或简短-NoP-NonInteractive-NonI
  • 要阻止cmd尝试解释任何参数/参数,你应该双引用它们 - 并使用反斜杠\"转义任何必要的内部双引号,同时尽可能用单引号替换双引号。

所以我建议:

powershell -NoP -NonI -C "Send-MailMessage -From \"SomeWeb-Prod@domain.com\" -To \"fromuser@domain.com\" -Subject 'Some notification for SomeWeb-Prod' -Body 'Some Alert for Host: %computername% with IP: %NetworkIP% at %time%. details in attached file.' -Attachments 'C:\somefile.txt' -Priority High -dno onFailure -SmtpServer 'smtp.domain.com'"

或者,(正如你自己部分发现的那样):

powershell -NoP -NonI -C "Send-MailMessage -From 'SomeWeb-Prod@domain.com' -To 'fromuser@domain.com' -Subject 'Some notification for SomeWeb-Prod' -Body 'Some Alert for Host: %computername% with IP: %NetworkIP% at %time%. details in attached file.' -Attachments 'C:\somefile.txt' -Priority High -dno onFailure -SmtpServer 'smtp.domain.com'"

答案 2 :(得分:0)

"$env:computername"对我不起作用。它只是将其打印为$ env:computername

%computername%工作。

这就是我现在正在做的事情。

powershell Send-MailMessage -From " `<user@domain.com>`" -To " `<user@domain.com>`" -Subject 'Some subject goes here' -Body 'Some body with alert regarding Host: %computername%. Some file is attached.' -Attachments 'C:\somefile.txt' -Priority High -dno onSuccess, onFailure -SmtpServer 'smtp.domain.com'

<强>更新

以上命令在Win7上工作正常,但在服务器2012上出错。最后这对win 2012有用了

powershell "Send-MailMessage -From "SomeWeb-Prod@domain.com" -To "fromuser@domain.com" -Subject 'Some notification for SomeWeb-Prod' -Body 'Some Alert for Host: %computername% with IP: %NetworkIP% at %time%. details in attached file.' -Attachments 'C:\somefile.txt' -Priority High -dno onFailure -SmtpServer 'smtp.domain.com'"

答案 3 :(得分:0)

通过对变量使用双引号,它对我有用。

我正在使用批处理脚本来调用Powershell Send-MailMessage

  

批处理脚本:send_email.bat

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe  -windowstyle hidden -command 'E:\path\send_email.ps1
  

Powershell脚本send_email.ps1

Send-MailMessage -From "noreply@$env:computername" -To '<target_email@example.com>' -Subject 'Blah Blah' -SmtpServer  'smtp.domain.com'  -Attachments 'E:\path\file.log' -BODY "Blah Blah on Host: $env:computername "