【问题标题】:Executing inline powershell script执行内联 powershell 脚本
【发布时间】:2017-06-14 02:19:30
【问题描述】:

我正在尝试从任务计划程序调用内联 powershell 脚本,以便在触发特定事件时发送电子邮件。我无法在任务计划程序操作窗口中使用本机“发送电子邮件”操作,因为 SMTP 服务器需要 SSL,并且无法在操作窗口中指定它。所以我希望“启动一个程序”并调用一些东西来发送电子邮件,但我想尽可能避免使用诸如 sendEmail 之类的第三方应用程序,因此希望能够调用类似于以下内容的内联 powershell 脚本。

将“程序/脚本”字段设置为powershell,并将参数字段设置为:

-Command "{Send-MailMessage -From "Name <name@domain.com>" -To "name@domain.com" -Subject "Test Subject" -Body "Test body at $(Get-Date -Format "dd/MM/yyyy")." -SmtpServer "smtp.domain.com" -UseSSL}"

由于嵌套引号等原因,这显然不起作用,所以我一直在命令提示符中尝试不同的变体,但我一生都无法弄清楚我需要转义哪些字符以及如何转义他们。

任何帮助将不胜感激。

【问题讨论】:

标签: powershell command inline


【解决方案1】:
  1. 看一下“powershell /?”的示例部分...

PowerShell -Command "& {Get-EventLog -LogName Application}"


  1. 看看如何使用引号。

PowerShell -Command "& {Send-MailMessage -From 'Name' -To 'name@domain.com' -Subject 'Test Subject' -Body ('Test body at { 0}.' -f (Get-Date -Format 'dd/MM/yyyy')) -SmtpServer 'smtp.domain.com' -UseSSL}"

【讨论】:

  • 谢谢,太好了。我忘了说的一件事是我也在尝试在电子邮件正文中添加换行符 - 我通常会使用 'r'n (由于 SO 的语法突出显示,必须在此处使用单引号而不是实际的反引号字符)但是反引号字符被视为文字,因为它们位于单引号字符串中。有什么想法我会怎么做?
【解决方案2】:

这应该可行:

powershell -Command 'Send-MailMessage -From "Name <name@domain.com>" -To "name@domain.com" -Subject "Test Subject" -Body "Test body at $(Get-Date -Format "dd/MM/yyyy")." -SmtpServer "smtp.domain.com" -UseSSL'

双引号可以用单引号,命令不需要大括号。

【讨论】:

  • 未提及,但可能还需要传递凭据。很少能在没有身份验证的情况下发送到 smtp 服务器。
  • 这个命令只是在控制台打印字符串而不是执行它。
猜你喜欢
  • 2020-01-25
  • 2020-02-12
  • 1970-01-01
  • 2021-11-06
  • 2012-09-18
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
相关资源
最近更新 更多