调用已在foreach中设置的变量 - powershell

时间:2015-12-17 15:57:15

标签: powershell

非常基本的问题我很抱歉,但我确定我以前没过。我想知道如何从foreach内部访问变量。例如,在这个简单的代码中,它只是echos $ username但不是我之后的确切名称...但是如果你把echo $user看起来它可以读取foreach和CSV。

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 = "helpdesk@server.com"
$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 个答案:

答案 0 :(得分:1)

现在,您正在循环浏览所有内容,然后显示$username,因此您始终会显示最后一个。

如果您将echo移到循环内,您将显示所有这些内容:

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

如果您需要特定的代码,则需要使用代码对其进行过滤,因此请在某处使用if语句,或使用Where-Object进行过滤;这取决于你想做什么。