在csv内容上过滤Get-aduser

时间:2016-07-15 19:46:21

标签: powershell active-directory

我的csv格式为

ln,fn
jones,bob
jagger,mick

我试图通过运行以下命令为这些用户从AD中获取邮件属性:

$names = import-csv .\names4.csv
FOREACH ($name in $names){
get-aduser -f {surname -eq "$name.ln" -and givenname -eq "$name.fn} -pr mail
}

这根本不会返回任何内容。如果我回显$ name.ln它会显示来自csv的用户名字列表,所以我不确定为什么上面的命令没有返回任何结果。

1 个答案:

答案 0 :(得分:3)

在可扩展字符串的上下文中(即双引号),powershell解析器仅扩展引用,直到. - 只需删除""引号:

$names = Import-Csv .\names4.csv
foreach($name in $names){
    Get-ADUser -Filter {Surname -eq $name.ln -and GivenName -eq $name.fn} -Properties mail
}

或者,将每个属性值分配给它自己的变量:

$names = Import-Csv .\names4.csv
foreach($name in $names){
    $sn = $name.ln
    $gn = $name.fn
    Get-ADUser -Filter {Surname -eq $sn -and GivenName -eq $gn} -Properties mail
}

在您需要在可扩展字符串中取消引用属性的任何其他情况下,请使用$()子表达式运算符:

"The last name is $($name.ln)"

但我建议不要使用ActiveDirectory模块,因为-Filter块有一些嵌套表达式的怪癖