2016-09-28 67 views
1

我试图从活动目录中获取用户,他们拥有特定的电子邮件地址。通过电子邮件查找广告用户

我有一个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 
} 

我收到的所有电子邮件的列表。

代码有什么问题?

回答

1

您的变量在单引号因此没有得到填充。你必须三个选项来修复:

使用有子表达式双引号$()

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] 
+0

当我把它们放在双引号 - 什么变化。仍然没有输出。当我省略它们时,我收到一条错误消息:在“System.Management.Automation.PSCustomObject”类型的对象中未找到“Property”email“ – redleo85

+0

您是否也将它放入子表达式中?所有三个提供的示例 –

+0

子表达式是什么意思?我只是用给定的例子代替了-filter参数。 – redleo85

相关问题