2015-12-17 2 views
1

Очень простой вопрос, извините, но я уверен, что у меня было это раньше. Я хочу просто знать, как я могу получить доступ к переменной изнутри foreach. Например, в этом простом коде, это просто echos $ username, но не точное имя, которое я после ... однако, если вы положили echo $user, похоже, что он может читать foreach и csv.Вызов переменной, которая была установлена ​​внутри foreach - powershell

add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010 

$ExSession = New-PSSession –ConfigurationName Microsoft.Exchange –ConnectionUri http://dlonsexh05.server.local/PowerShell/ –Authentication Kerberos 

import-PSSession $Exsession -AllowClobber 

$users= import-csv 'C:\Surface Pro\users.csv' 

foreach ($user in $users){ 

$duedate = $user.DueDate 
$Username = $user.Name 
$email = $user.EmailAddress 


$smtpServer = "dlonsexh05.server.local" 
$smtpFrom = "[email protected]" 
$smtpTo = $email 
$messageSubject = "$username your laptop is due back on $duedate" 
$SMTPPort = "587" 



$message = New-Object System.Net.Mail.MailMessage $smtpfrom, $smtpto 
$message.Subject = $messageSubject 

$smtp = New-Object Net.Mail.SmtpClient($smtpServer) 
$smtp.Send($message) 
Remove-PSSession $Exsession 

break 

} 

ответ

1

Прямо сейчас, вы перекручивание через все и затем отображения $username, так что вы всегда будете отображать последний.

При перемещении echo внутрь петли, вы будете отображать все из них:

$users= import-csv 'C:\Surface Pro\users.csv' 
foreach ($user in $users){ 
    $username = $user.Name 
    echo $username 
} 

Если вы хотите конкретную один, вам нужны коды, чтобы фильтровать их, поэтому используйте if заявление где-то, или фильтр с Where-Object; это зависит от того, что вы хотите сделать.

+0

Спасибо, briantist. Я хотел бы объявить загрузку переменных внутри этого CSV, а затем использовать их позже. Например $ email = $ User.email ... затем вне цикла я хотел бы использовать его в функции или что-то подобное, чтобы отправить электронное письмо всем в столбце электронной почты csv. Должен ли я поместить весь свой SMTP-код внутри цикла? –

+0

@ DanielGripton хорошо, да. Каждая итерация цикла дает вам одну строку CSV, поэтому код, который вы хотите запустить против _each row_, должен находиться внутри цикла. – briantist

+0

Хорошо, это сложно! Я поместил код внутри, он отправляет письма на каждый адрес электронной почты в CSV, но отправляет еще 5 пустых. Если я сделаю перерыв, он отправляется только на верхнюю. Я бы хотел, чтобы он работал в CSV, а затем остановился, как только он закончил все адреса электронной почты. Вот код! –

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