通过电子邮件查找广告用户
问题描述:
我试图从活动目录中获取用户,他们拥有特定的电子邮件地址。通过电子邮件查找广告用户
我有一个CSV文件,其中包含电子邮件。
$data = import-csv -path .\are.csv -delimiter +
foreach($i in $data)
{
get-aduser -filter {UserPrincipalName -like '$i.email'}
}
我的问题是,我没有得到任何输出。没有错误,没有数据。当我用其中一个电子邮件地址替换$i.email
时,我得到了一个用户的正确用户信息。所以硬编码的作品。
当我这样做:
foreach($i in $data)
{
$i.email
}
我收到的所有电子邮件的列表。
代码有什么问题?
答
您的变量在单引号因此没有得到填充。你必须三个选项来修复:
使用有子表达式双引号$()
:
UserPrincipalName -like "$($i.email)"
只是省略引号:
UserPrincipalName -like $i.email
最后,你可以使用一个格式字符串(即使带有单引号):
UserPrincipalName -like ('{0}' -f $i.email)
下面是一个例子来演示使用Write-Host
cmdlet的什么实际价值就会被传递:
$data =
@'
email, id
[email protected], 1
'@ | convertfrom-csv
foreach($i in $data)
{
Write-Host '$i.email' # This is your current approach
Write-Host "$($i.email)"
Write-Host $i.email
Write-Host ('{0}' -f $i.email)
}
输出:
$i.email # This is the output of your current approach
[email protected]
[email protected]
[email protected]
当我把它们放在双引号 - 什么变化。仍然没有输出。当我省略它们时,我收到一条错误消息:在“System.Management.Automation.PSCustomObject”类型的对象中未找到“Property”email“ – redleo85
您是否也将它放入子表达式中?所有三个提供的示例 –
子表达式是什么意思?我只是用给定的例子代替了-filter参数。 – redleo85