将变量传递给Send-MailMessage

时间:2016-05-06 18:45:48

标签: powershell

我尝试创建一个PowerShell脚本,该脚本将在我的Active Directory中搜索密码将在14天后过期的用户,并通过电子邮件向用户发送提醒消息。在大多数情况下,我的脚本按预期工作,但我没有得到正确的电子邮件输出。

这是剧本:

Import-Module ActiveDirectory
$below = (Get-Date).AddDays(-77)
$above = (Get-Date).AddDays(-76)
$Persons = Get-ADUser -Filter {PasswordNeverExpires -eq $False -AND (PasswordLastSet -lt $above -AND PasswordLastSet -gt $below) -AND (LastLogonDate -like "*") -AND (MAil -like "*")}

foreach ($Person IN $Persons) {
$body = "Your Windows password will expire in 14 days. Please consider changing your password. - $User.Name - $User.PasswordLastSet"
Send-MailMessage -To $User.Mail -Subject "Alert! Password Expiring Soon!" -From 'Do_Not_Reply@domain.com' -Body $body -SmtpServer smtp.server.com
}

这是我收到的邮件正文中的内容。

  

您的Windows密码将在14天后过期。请考虑更改密码。 - .Name - .PasswordLastSet

如何将用户名和密码的最后设置数据传递给正文文本?

2 个答案:

答案 0 :(得分:4)

您需要使用subexpressions $(...)访问字符串中$User的属性:

"... - $($User.Name) - $($User.PasswordLastSet)"

否则,PowerShell只会将$User解析为变量,.Name.PasswordLastSet部分将被视为普通文本。

答案 1 :(得分:1)

iCodez(正确)answer的替代方法是使用格式运算符(-f):

$body = "...your password. - {0} - {1}" -f $User.Name,$User.PasswordLastSet