经过大量的错误和编辑后,我得到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。
答案 0 :(得分:3)
在参数值周围使用双引号以扩展变量。
即:
-Body "Some body with alert regarding Host: **$env:computername**. ..."
相关reading。
答案 1 :(得分:1)
问题中的命令行和您自己的答案依赖于powershell当前具有默认(位置0)参数-Command
的事实,
但是,这会从PowerShell 6.0.0beta3
更改为-File
-C
作为最短
-Command
的缩写。-NoProfile
或简短-NoP
和-NonInteractive
或-NonI
\"
转义任何必要的内部双引号,同时尽可能用单引号替换双引号。所以我建议:
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 "