$Env:ComputerName无法与批处理文件中的powershell Send MailMessage一起使用

$Env:ComputerName无法与批处理文件中的powershell Send MailMessage一起使用,powershell,email,batch-file,Powershell,Email,Batch File,在大量错误和编辑之后,我通过命令提示符获得了sendmailmessage。下面的迭代发送出完美的电子邮件 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

在大量错误和编辑之后,我通过命令提示符获得了sendmailmessage。下面的迭代发送出完美的电子邮件

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'
powershell发送邮件消息-从“``”-到“``”-主题“某个主题转到此处”-Body“某个主体带有有关主机的警报:$env:computername。已附加已删除文件的列表。“-附件”C:\somefile.txt“-高优先级-dno onSuccess,onFailure-SmtpServer“smtp.domain.com”
但是,这不会获取正文中的
computername
。我曾尝试在powershell中直接运行此命令,它与正文中的computername变量一起工作

为了让它简单地发送邮件,我已经试过了
powershell-command“command”
powershell-command“{command}
powershell-command“&{command}”
等等,它甚至不发送 发送电子邮件


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

在参数值周围使用双引号,以扩展包含的变量

即:


相关。

在参数值周围使用双引号将包含的变量展开

即:

相关。

“$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'
“$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'

问题中的命令行和您自己的答案取决于powershell当前具有默认(位置0)参数
-command

但随着这从
PowerShell 6.0.0beta3
更改为
-File

  • 您应该明确使用至少
    -C
    作为最短值
    -命令的缩写
  • 为了加快执行速度,我会使用附加参数
    -NoProfile
    或short
    -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当前具有默认(位置0)参数
-command

但随着这从
PowerShell 6.0.0beta3
更改为
-File

  • 您应该明确使用至少
    -C
    作为最短值
    -命令的缩写
  • 为了加快执行速度,我会使用附加参数
    -NoProfile
    或short
    -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 Send MailMessage

批处理脚本:send_email.bat

Pwershell脚本发送_email.ps1

发送邮件消息-从“noreply@$env:computername”-到“”-主题“Blah Blah”-SmtpServer“smtp.domain.com”-附件“E:\path\file.log”-主体“主机上的Blah Blah:$env:computername”

它对我有效,在变量周围使用双引号

我正在使用批处理脚本调用powershell Send MailMessage

批处理脚本:send_email.bat

Pwershell脚本发送_email.ps1

发送邮件消息-从“noreply@$env:computername”-到“”-主题“Blah Blah”-SmtpServer“smtp.domain.com”-附件“E:\path\file.log”-主体“主机上的Blah Blah:$env:computername”

没有。我最后使用了
%computername%
批处理变量,效果很好。我不知道在powershell命令中是如何发生的。你必须显示批处理文件的源代码。可能还有其他问题。没有。我最后使用了
%computername%
批处理变量,效果很好。不确定在powershell命令中是如何发生这种情况的。您必须显示批处理文件的源代码。可能还有其他问题。
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'"
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe  -windowstyle hidden -command 'E:\path\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 "