2016-05-06 3 views
1

Я пытаюсь создать сценарий PowerShell, который будет искать мой Active Directory для пользователей с паролями, срок действия которых истекает через 14 дней, и отправит по электронной почте пользователю напоминание. По большей части у меня есть сценарий, работающий по назначению, но я не получаю надлежащего вывода для электронных писем.Передача переменных в Send-MailMessage

Это сценарий:

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 '[email protected]' -Body $body -SmtpServer smtp.server.com 
} 

Это то, что я получаю в теле письма, которые он отправляет.

Срок действия вашего пароля на Windows истекает через 14 дней. Пожалуйста, подумайте об изменении пароля. - .Name - .PasswordLastSet

Как передать имя пользователя и пароль последним установленным данным в основной текст?

ответ

4

Вы должны использовать subexpressions $(...) для доступа к свойствам на $User в строке:

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

В противном случае, PowerShell будет только анализировать $User в качестве переменной и .Name и .PasswordLastSet части будут рассматриваться как обычный текст.

+0

Спасибо, iCodez. Это то, что мне нужно. –

1

альтернатива iCodez «s (правильные) answer является использование оператора формата (-f):

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

Когда вы начали носить галстук? – Matt

+0

@Matt ха-ха вообще или на этом сайте? – briantist

+0

Этот, я полагаю. Обычно это было ваше лицо, которое я проверил. Теперь вы все профессионалы – Matt

Смежные вопросы