非常基本的问题我很抱歉,但我确定我以前没过。我想知道如何从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
}
答案 0 :(得分:1)
现在,您正在循环浏览所有内容,然后显示$username
,因此您始终会显示最后一个。
如果您将echo
移到循环内,您将显示所有这些内容:
$users= import-csv 'C:\Surface Pro\users.csv'
foreach ($user in $users){
$username = $user.Name
echo $username
}
如果您需要特定的代码,则需要使用代码对其进行过滤,因此请在某处使用if
语句,或使用Where-Object
进行过滤;这取决于你想做什么。