1

パスワードの有効期限が 10 日以内に切れるユーザーに電子メールを生成する powershell スクリプトがあります。メールはHTML形式になっていますが、一文だけ文字の色を赤にして注意を喚起したいです。ただし、html コードを囲む引用符に問題があります。二重引用符を使用すると、powershell はリテラル メッセージを出力し、一重引用符でエラー メッセージを表示します。powershell メールで複数のフォントの色を使用する方法はありますか?

ここに私が現在使用しているコードがあります。また、これは powershell でのスクリプトの最初の試みであることも付け加えておきます。そのため、長い道のりを行っている場合は、いくつかの入力に対してオープンです。

    # 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
        }

}`

4

1 に答える 1

0

Powershellの「ここの文字列」機能を見たことがありますか?この機能について説明しているtechnetの記事があります。もののテンプレートである文字列にはいつもそれらを使用しています。

このようなテンプレートでは、{0}のようなc#スタイルのプレースホルダーを使用するのが好きです。これにより、日付と通貨の派手なフォーマットが可能になります。(私の例では、「派手な」日付形式を使用しています。)

プレースホルダー付きのテンプレートを使用するということは、文字列を特定の順序で連結することを覚えたり、$firstnameのようなものがそれらの連結内のどこに配置されなければならないかを覚えておく必要がないことも意味します。また、より簡単に国際化できるはずですが、私はそれを行ったことがありません。

これは簡単な例です。ループロジックに統合する必要があります。

# 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
于 2012-06-18T17:49:57.157 に答える