在Powershell电子邮件中设置HTML字体颜色 [英] Setting HTML font color in Powershell email

查看:77
本文介绍了在Powershell电子邮件中设置HTML字体颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Powershell脚本,它将为密码将在< = 10天内到期的用户生成一封电子邮件.电子邮件已格式化为HTML,但是我想将一句话的字体颜色更改为红色以引起注意.但是,我在html代码两边的引号有问题.如果我使用双引号,powershell将输出文字消息,并给出带单引号的错误消息.有没有办法在Powershell电子邮件中使用多种字体颜色?

I have a powershell script that will generate an email for users whose password will expire in <=10 days. The email is formatted into HTML, but I want to change the font color of one sentence to red to call attention to it. However, I'm having a problem with the quotation marks around the html code. If I use double quotes powershell outputs the literal message and gives an error message with single quotes. Is there a way to use multiple font colors in a powershell email?

这是我当前正在使用的代码.我还将添加这是我第一次尝试使用Powershell编写脚本,因此,如果我正在做的事情很长,那么我可以接受一些输入.

Here is the code I'm using currently. I'll also add this is my first attempt at a script in powershell so if I'm doing things the long way I'm open to some input.

    # Import ActiveDirectory module for Powershell V2 AD cmdlets
    import-module activedirectory
    # Uncomment the following line to include optional cmdlets included with Exchange  2010 schema changes. No such cmdlets are included in this script
    # add-pssnapin microsoft.exchange.management.powershell.e2010 

    #Import the maximum password age from Active Directory GPO policy from domain
    $maxdays=(Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays
    $date = date

    # Simple HTML Message to format body of email. Body is broken up into four parts for appearance and for easy function insertion into message.
    $body1 +=   "<html><body><br> Your network password will expire in "
    $body2 +=   " day(s).</body><html>"
    $body3 +=   "<html><body><br>Employees of Organization, when you receive this email please visit https://scriptlogic/iisadmpwd/aexp2b.asp to reset your network password."
    $body3 +=   "<br>If you are <font color =""#99000"">not employed by Organization</font>, please visit https://gateway.organization.org to reset your network password using our Citrix website."
    $body3 +=   "<br>If you need assistance resetting your password, please contact the Ibformation Service Department at 867-5309"
    $body3 +=   "<br>If you have a portable device, smart phone, etc. that you use to access the Network the new password will need to be updated on these devices also."
    $body3 +=   "<br><br>Thank you,"
    $body3 +=   "<br> IS Department"
    $body3 +=   "<br><img src='P:\Documents\PowerShell\Scripts\password\logo.jpg' alt='logo'/>"
    $body3 +=   "<br><br><hr>"
    $body3 +=   "From <b> IS Department</b>"
    $body3 +=   "<br>The information contained in this e-mail and any accompanying documents is confidential, may be privileged, and is intended solely for the person and/or entity to whom it is"
    $body3 +=   "<br>addressed (i.e. those identified in the <b> To: </b> and <b> cc:</b> box). They are the property of this organization. Unauthorized review, use, disclosure, or copying of this"
    $body3 +=   "<br>communication, or any part thereof, is strictly prohibited and may be unlawful.  The IT Department thanks you for your cooperation.<br>"
    $body4 +=   "<br><hr><br></body></html>"

    # Combine body segments into string for display
    $bod1y=$body1 | out-string 
    $body2=$body2 | out-string 
    $body3=$body3 | out-string 
    $body4=$body4 | out-string 

    #Gather ADusers which are enabled, password is set not set to never expire and all properties of user object. *Note Extension Attributes will not show up unless they are populated.
    (Get-ADUser -filter {(Enabled -eq "True") -and (PasswordNeverExpires -eq "False")} -properties *) | Sort-Object pwdLastSet |

    #Loop to validate password age of each account and generate email. Emails to non-domain addresses are generated based on extensionattribute1 and extensionattribute2. 
    #Active Directory is pre-populated with the user address as extensionattribute1 and domain information in extensionattribute2. For example, johndoe = extensionattribute1
    # gmail.com = extensionattribute2.
    foreach-object {
    $lastset=Get-Date([System.DateTime]::FromFileTimeUtc($_.pwdLastSet))
    $expires=$lastset.AddDays($maxdays).ToShortDateString()
    $daystoexpire=[math]::round((New-TimeSpan -Start $(Get-Date) -End $expires).TotalDays)
    $samname=$_.samaccountname
    $firstname=$_.GivenName
    $lastname=$_.SN
    $extensionattribute1=$_.extensionattribute1
    $extensionattribute2=$_.extensionattribute2
    $recipient="$extensionattribute1@$extensionattribute2"
                if (($daystoexpire -ge 1) -and ($daystoexpire -le 10)) {
                $ThereAreExpiring=$true

                $email = @{
                to = "$recipient" 
                from = 'IS_Notifications@org.org'
                subject = "$firstname $lastname your network password will expire in $daystoexpire day(s)"
                body = "$firstname $lastname" +  " $body1" + "$daystoexpire" + "$body2" + "$body3" + "$date" + "$body4"
                smtpserver = 'smtp.server.org'
                # attachments = "p:\documents\citrix\citrix_password_reset.doc"
            }
        Send-MailMessage @email  -BodyAsHTML
        }

}`

推荐答案

您是否看过Powershell的此处字符串"功能?有 technet文章讨论了该功能.我一直在使用它们作为字符串的模板.

Have you looked at the "here string" feature of Powershell? There is a technet article that discusses the feature. I use them all of the time for strings that are templates for stuff.

我喜欢在此类模板中使用c#样式的占位符,例如{0}.这样就可以对日期和货币进行精美的格式设置.(我的示例中使用的是'花式'日期格式.)

I like to use c#-style placeholders like {0} in such templates. This allows for fancy formatting of dates and currency. (I am using a 'fancy' date format in my example.)

使用带有占位符的模板还意味着我不必记住按特定顺序将字符串连接在一起,也不必记住$ firstname之类的东西必须放在那些串联中.还应该使它更容易国际化,但是我从来没有这样做.

Using a template with placeholders also means I don't have to remember to concatenate strings together in a particular order or keep in mind where stuff like $firstname has to go within those concatenizations. It's also supposed to be more easily internationalized, but I've never done that.

这是一个快速示例,您需要将其集成到循环逻辑中.

Here is a quickie example, you would need to integrate it into your looping logic.

# first, stick the template into a variable for later use. Use a "here string" for ease of formatting and editting.
$bodyTemplate = @"
{0} {1}
<html><body><br> Your network password will expire in {2} day(s).</body><html>
<html><body><br>Employees of Organization, when you receive this email please visit https://scriptlogic/iisadmpwd/aexp2b.asp to reset your network password.
<br>If you are <font color =""#99000"">not employed by Organization</font>, please visit https://gateway.organization.org to reset your network password using our Citrix website.
<br>If you need assistance resetting your password, please contact the Ibformation Service Department at 867-5309
<br>If you have a portable device, smart phone, etc. that you use to access the Network the new password will need to be updated on these devices also.
<br><br>Thank you,
<br> IS Department
<br><img src='P:\Documents\PowerShell\Scripts\password\logo.jpg' alt='logo'/>
<br><br><hr>
From <b> IS Department</b>
<br>The information contained in this e-mail and any accompanying documents is confidential, may be privileged, and is intended solely for the person and/or entity to whom it is
<br>addressed (i.e. those identified in the <b> To: </b> and <b> cc:</b> box). They are the property of this organization. Unauthorized review, use, disclosure, or copying of this
communication, or any part thereof, is strictly prohibited and may be unlawful.  The IT Department thanks you for your cooperation.<br>
{3:D}
<br><hr><br></body></html>
"@

# Now, loop through your users, calculate $DaysUntilExpiry, test the value and build the email to be sent
# I'm just making up some dumb values here
$daystoexpire = 42 # or whatever
$firstname =  "George"
$lastname = "Washington"
$date = date

# using the template, stick the appropriate values into place and store that in a variable for convenience
$body = $bodyTemplate -f $firstname, $lastname, $daystoexpire, $date

# do whatever we want with $body
write-host $body

这篇关于在Powershell电子邮件中设置HTML字体颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆