简体   繁体   English

使用 send-mailmessage 使用 powershell 格式化电子邮件

[英]Email formatting with powershell using send-mailmessage

Objective: search for all disabled users who have something in the ipPhone attribute, email the results to email address.目标:搜索所有在 ipPhone 属性中具有某些内容的禁用用户,将结果通过电子邮件发送到电子邮件地址。

Issue: when I receive the email, the data is not separated by user account or in a table Not sure how to correct it问题:当我收到电子邮件时,数据没有按用户帐户或表格分隔 不知道如何更正

Code:代码:

#Add-WindowsFeature RSAT-AD-PowerShell
#needed for server 2012+ if no rstat tools installed on it
#Import-Module activedirectory
#Need to import modeule to read powershell

$emailto = 'markbuehler@milgard.com'
$emailfrom = 'markbuehler@milgard.com'
$emailsubject = "Disabled Users who have IpPhone Attribute Active"
$smtp_server = 'corp-smtp01.milgardwindows.com'

$disabledusers = get-aduser -SearchBase 
"OU=MIMilgardUsersandComputers,DC=milgardwindows,DC=com" -Filter {(Enabled -eq $false -and 
ipPhone -like "*")} -Properties * | Select-Object Name,UserPrincipalName,Office,ipPhone | 
Format-Table -Property Name,UserPrincipalName,Office,ipPhone


Send-MailMessage -To $emailto -From $emailfrom -Subject $emailsubject -SmtpServer $smtp_server 
-BodyasHtml ($disabledusers | Out-String)'

Email body result:电子邮件正文结果:

Name UserPrincipalName Office ipPhone ---- ----------------- ------ ------- Adi Rasilau 
AdiRasilau@milgard.com Milgard - Sacramento 2742 Nai Jones NaiJones@milgard.com Milgard - 
Sacramento 2780 Phillip Wheeler PhillipWheeler@milgard.com Milgard - Sacramento 2727 Joy 
Rogers JoyRogers@milgard.com Milgard - Temecula 3286"

Since you are using Format-Table , you need to make sure the data ends up in your HTML email either with由于您使用的是Format-Table ,您需要确保数据最终出现在您的 HTML 电子邮件中

  • a monospaced font, so it will look the same as in the console等宽字体,因此它看起来与控制台中的相同
  • a nicely formatted HTML table一个格式良好的 HTML 表格

What you are forgetting in your Send-Mailmessage line is that you need to send the table as Body .您在Send-Mailmessage行中忘记的是您需要将表格作为Body发送。

The easiest way of keeping the data as table is to wrap the table output inside <pre>..</pre> tags so it will display with a monospaced font and newlines are kept.将数据保存为表格的最简单方法是将表格输出包装在<pre>..</pre>标签中,这样它就会以等宽字体显示并保留换行符。
I also would like to show you how to use Splatting on cmdlets that can take a lot of parameters:我还想向您展示如何在可能需要很多参数的 cmdlet 上使用Splatting

# Get-ADUser by default already returns these properties:
# DistinguishedName, Enabled, GivenName, Name, ObjectClass, ObjectGUID, SamAccountName, SID, Surname, UserPrincipalName
$searchBase    = "OU=MIMilgardUsersandComputers,DC=milgardwindows,DC=com"
$filter        = "Enabled -eq 'false' -and ipPhone -like '*'"
$disabledusers = Get-ADUser -SearchBase $searchBase -Filter $filter -Properties Office,ipPhone

# stringify the results into a table as string and wrap inside '<pre>..</pre>' tags
$table = '<pre>{0}</pre>' -f ($disabledusers | 
                              Format-Table -AutoSize -Property Name,UserPrincipalName,Office,ipPhone | 
                              Out-String)

# or create a HTML table from it
# $table = $disabledusers | ConvertTo-Html -Property Name,UserPrincipalName,Office,ipPhone
# in case you do a HTML table, also create a CSS style for it so it shows up nicely formatted

# create a Hashtable for splatting
$mailParams = @{
    To         = 'markbuehler@milgard.com'
    From       = 'markbuehler@milgard.com'
    Subject    = 'Disabled Users who have IpPhone Attribute Active'
    SmtpServer = 'corp-smtp01.milgardwindows.com'
    Body       = $table
    BodyAsHtml = $true
    # more parameters can go here
}
# send the email
Send-MailMessage @mailParams

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM