1

目标:搜索所有在 ipPhone 属性中有内容的禁用用户,将结果通过电子邮件发送到电子邮件地址。

问题:当我收到电子邮件时,数据未按用户帐户或表格分隔不知道如何更正

代码:

#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)'

电子邮件正文结果:

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"
4

1 回答 1

1

由于您使用的是Format-Table,因此您需要确保数据以 HTML 电子邮件结尾

  • 等宽字体,因此它看起来与控制台中的相同
  • 格式精美的 HTML 表格

Send-Mailmessage在行中忘记的是您需要将表格发送为Body.

将数据保存为表格的最简单方法是将表格输出包装在<pre>..</pre>标签内,以便以等宽字体显示并保留换行符。
我还想向您展示如何在可以采用大量参数的 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
于 2021-11-06T13:22:53.610 回答