2015-04-01 2 views
0

У меня есть автоматический скрипт, который импортирует пользователей из CSV-файла в Active Directory. Я хотел бы отправить электронное письмо для каждого пользователя, созданного с их именем пользователя и паролем, новому администратору для входа в систему. В настоящее время он отправляет электронное письмо для каждого пользователя, но не вставляет имя пользователя и пароль.Как вставить переменную в HTML в powershell?

$newadstaff = Import-CSV "newad-staff.csv" 
$mailpwd = ConvertTo-SecureString 'helpdeskpassword' -AsPlainText -Force 
$cred = New-Object System.Management.Automation.PSCredential '[email protected]',$mailpwd 
$googusr = $_.'HomePage' 
$googpwd = $_.'AccountPassword' 
$Body = @" 
<style> 
.colorchange {color:#4F81BD;} 
ind {text-indent:50px;} 
</style> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<body> 
<div style="background-color:#3059D6; color:white; padding:20px;"> 
<p style="font-family:Tahoma, Geneva, sans-serif; font-size:40pt"; align=center><b>NEW STAFF USER ACCOUNT</b></p> 
</div> 
<p style="font-family:Tahoma, Geneva, sans-serif; font-size:20pt">A new Google account has been created for: </p> 
<p style="font-family:Tahoma, Geneva, sans-serif; font-size:12pt">Please navigate to <a href="https://google.com/accounts">Google Account Login</a> and login with the below credentials. You will be prompted to change your password after logging in:</p> 
<p style="font-family:Tahoma, Geneva, sans-serif; font-size:12pt"><b>Username: $googusr </b> 
<p style="font-family:Tahoma, Geneva, sans-serif; font-size:12pt"><b>Password: $googpwd </b> 
</body> 
</html> 
"@ 

$param = @{ 
SmtpServer = 'smtp.gmail.com' 
Port = 587 
UseSsl = $true 
Credential = $cred 
From = '[email protected]' 
To = '[email protected]' 
Subject = 'New User Account' 
Body = $body 

} 
$When = ((Get-Date).Addhours(-1)).Date 
Get-ADUser -Filter {whenCreated -ge $When} -Properties whenCreated | export- csv "newad-staff.csv" 

Foreach ($user in $newadstaff) 
{ 
Send-MailMessage @param -BodyAsHtml 
} 
+0

Ваши переменные-пользователи и переменные имеют такое значение, как вы определяете его по выходному конвейеру. не уверен, что это ваш весь скрипт, но я, вероятно, буду «писать-хост» для каждой переменной пользователя и пароля, и если они появятся, бросьте «write-host» в конце вашей переменной body, чтобы убедиться, что текстовый поток создает его включает значения, которые вы ожидаете. В CSV вы импортируете одну учетную запись? если это так, возможно, ваш пользователь и пароль должны иметь формат '$ newadstaff.AccountPassword'. – ssaviers

+0

csv - это список всех пользователей, добавленных в AD за последний час. Я новичок в написании сценариев/программировании.Я все еще изучаю powershell, поэтому, если бы вы могли привести примеры и слова великого Майкла Скотта «Объясните это мне, как будто мне 5 лет». :) – Mike

+0

создал для вас вариант ответа с кратким описанием. Удачи – ssaviers

ответ

0

Ваш вопрос как и где вы объявляете переменные

$googusr = $_.'HomePage' 
$googpwd = $_.'AccountPassword' 

$_ должен представлять тыс текущий пункт в конвейере. Во время вашего назначения $_ ничего не представляет. Вы оба назначаете $null.

Ваша первая строка предназначена для импорта CSV $newadstaff = Import-CSV "newad-staff.csv". Кажется странным, поскольку вы позже перезаписываете этот файл с новыми пользователями, созданными за последний час. В теории нет ничего плохого в этом, это просто кажется странным. Я оставил этот порядок в следующем коде.

Новый код

$newadstaff = Import-CSV "newad-staff.csv" 
$mailpwd = ConvertTo-SecureString 'helpdeskpassword' -AsPlainText -Force 
$cred = New-Object System.Management.Automation.PSCredential '[email protected]',$mailpwd 
$Body = @" 
<style> 
.colorchange {{color:#4F81BD;}} 
ind {{text-indent:50px;}} 
</style> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<body> 
<div style="background-color:#3059D6; color:white; padding:20px;"> 
<p style="font-family:Tahoma, Geneva, sans-serif; font-size:40pt"; align=center><b>NEW STAFF USER ACCOUNT</b></p> 
</div> 
<p style="font-family:Tahoma, Geneva, sans-serif; font-size:20pt">A new Google account has been created for: </p> 
<p style="font-family:Tahoma, Geneva, sans-serif; font-size:12pt">Please navigate to <a href="https://google.com/accounts">Google Account Login</a> and login with the below credentials. You will be prompted to change your password after logging in:</p> 
<p style="font-family:Tahoma, Geneva, sans-serif; font-size:12pt"><b>Username: {0} </b> 
<p style="font-family:Tahoma, Geneva, sans-serif; font-size:12pt"><b>Password: {1} </b> 
</body> 
</html> 
"@ 

$param = @{ 
    SmtpServer = 'smtp.gmail.com' 
    Port = 587 
    UseSsl = $true 
    Credential = $cred 
    From = '[email protected]' 
    To = '[email protected]' 
    Subject = 'New User Account' 
    Body = "" 
} 

$When = ((Get-Date).Addhours(-1)).Date 
Get-ADUser -Filter {whenCreated -ge $When} -Properties whenCreated | export-csv "newad-staff.csv" 

Foreach ($user in $newadstaff) 
{ 
    # The body of each mail is different. Set this body for the current $user 
    $param.Body = $body -f $user.HomePage,$user.AccountPassword 

    Send-MailMessage @param -BodyAsHtml 
} 

Вы никогда не изменяя тело новой информации от каждого пользователя. Чтобы это стало проще, я обновил здесь строку с некоторыми -Format операторскими заполнителями {0} и {1}. Теперь в цикле мы обновим корпус $param и добавим HomePage и AccountPassword так же, как вы пытались с $googusr и $googpwd. Send-MailMessage остается неизменным.

Примечания о формате операторе

Поскольку у вас есть фигурные скобки в вашей $body строки уже они должны быть экранированы. Где вы видите {, они удваиваются до {{, и то же самое происходит для противоположной фигурной скобки. Я сделал это, чтобы очистить фильтр ForEach.

+0

Matt, когда я пытаюсь это сделать, я получаю следующую ошибку: Ошибка форматирования строки: строка ввода не была в правильном формате .. В строке: 39 char: 5 + $ param.Body = $ body -f $ user .HomePage, $ user.AccountPassword + CategoryInfo: InvalidOperation: (