我正在开发一个PowerShell脚本,每次都会发送不同主题和正文的电子邮件。
我正在尝试将Send-MailMessage
移动到我可以用来减少代码行的函数中。
$Sender = 'jones@example.com'
$text = "<html><body>"
$text += "<p>Welcome</p>"
### A cmdlet that would give recipient email address
$Recipient = (Get-Details -user $user).email
$smtp = "server.example.com"
$subject = "welcome email"
Send-MailMessage -BodyAsHtml $text -from $Sender -SmtpServer $smtp -Priority high -to $Recipient -Subject $subject
Write-Output "executing commands to capture results"
Write-Output ""
### Few Commands executed in this step
Write-Output "Analyzing results"
### Few commands executed in this step
$newtext = "<html><body>"
$newtext += "Congrats, you are selected"
$newsubject = "results email"
Send-MailMessage -BodyAsHtml $newtext -from $Sender -SmtpServer $smtp -Priority high -to $Recipient -Subject $subject
答案 0 :(得分:0)
你可以创建一个这样的函数:
Function Send-Email($text,$subject,$recipient)
{
Send-MailMessage -BodyAsHtml $text -From "jones@example.com"
-SmtpServer "server.example.com" -Priority High -To $recipient -Subject $subject
}
你可以这样称呼:
Send-Email -text "Hello" -subject "Test" -recipient "test@example.com"
您可以添加或删除参数,具体取决于更改的内容。假设smtp服务器不会发生变化,例如,这不是一个参数。
答案 1 :(得分:0)
我正在尝试将
Send-MailMessage
移动到我可以用来减少代码行的函数中。
如果选项很多且永远不会改变,那么为一行写一个函数会很有用。但是你确实有一个变化。还有另一个PowerShell功能也适用于此。 Splatting!
$emailParameters = @{
From = $Sender
SmtpServer = $smtp
Priority = "high"
To = $Recipient
Subject = $subject
}
Send-MailMessage -BodyAsHtml $text @emailParameters
# ... other code and stuff
Send-MailMessage -BodyAsHtml $newtext @emailParameters
现在你仍然只需要在一个地方进行更改,代码可以说更简洁。
另一点是,当你同时制作多行字符串时,如果要在脚本的过程中构建,你总是可以在这里使用字符串。你只有两行,但如果你的代码随着时间的推移而发展,那么早期开始而不是很多$object += "string"
行是一个很好的策略
$text = @"
<html><body>
<p>Welcome</p>
"@
请注意,缩进会保留在生成的here-string中。 "@
必须出现在自己的行上,没有前导空格。使用双引号意味着您仍然可以在那里扩展变量。