使用电子邮件地址获取AD用户

8

当我想从用户那里获取一些信息时,我使用以下代码:

Get-ADUser -Filter {EmailAddress -eq 'jperez@dominio.com'}

但是当我想要查看大量用户的信息时,我会尝试以下方法:

$batch| foreach {Get-ADUser -Filter {emailaddress -eq $_.email}} 

CSV文件中变量的名称为“email”,但我遇到了如下错误:

“Get-ADUser:在类型为'System.Management.Automation.PSCustomObject'的对象中未找到属性:'email'”

我无法使用身份验证,因为此身份验证不支持电子邮件地址。


欢迎来到Stack Overflow!不幸的是,您的问题非常不清楚。请包含适当的标签以显示您正在使用哪种语言/技术。还请参考https://stackoverflow.com/help/how-to-ask,了解如何提出高质量的问题。同时,请使用Markdown语法正确格式化您的代码(编辑器中可以找到帮助)。 - akraf
1
虽然使用脚本块 ({ ... }) 作为 -Filter 参数非常方便,但最好避免使用 - 这里的问题正是它们的使用方式:您不能在过滤器中以这种方式使用属性引用 $_.email。 - 参见 此答案,它回答了您的问题的重复内容。 - mklement0
4个回答

2

看起来你没有设置搜索结果返回的属性。例如:

Import-csv -Path \\tsclient\c\temp\test.csv -delimiter ";" | ForEach {
Get-ADUser -Filter "EmailAddress -eq '$($_.email)'" -Properties EmailAddress 
}

2
您获取这些信息的格式是什么?
个人而言,我喜欢创建一个临时文件,然后在for循环中使用变量进行查询。例如,如果我有一个文件,其中包含电子邮件地址列表,位于C:\Users\MyUser\Documents\emailList.txt,我会执行以下操作:
$my_list = Get-Content C:\Users\MyUser\Documents\emailList.txt
foreach ($x in $my_list){
    $x = $x replace '\s',''
    Get-ADUser -Filter {EmailAddress -eq $x}
}

这将通过电子邮件地址为整个列表提取Get-ADuser。它还会删除空格,这在以前的情况下曾经给我带来了问题。如果您有进一步的问题或遇到以上命令无法正常工作的问题,请告诉我。


0
另一个快速解决方案是仅将要过滤的属性传递到过滤表达式中(在使用CSV导入时效果很好)。使用您的示例,它将更改为:
$batch.email| foreach {Get-ADUser -Filter {emailaddress -eq $_}} 

0

或者你可以使用 invoke-expression 来执行它。

$content = Get-Content c:\folder\file.txt

foreach ($emails in $content)

{

    $command = "get-aduser  -Filter {emailaddress -eq ""$emails""} | select -ExpandProperty SamAccountName"

    Invoke-Expression $command

}

也可以工作 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接