我有一种情况需要在.csv中列出电子邮件列表,导入列表并从Active Directory中提取适用的属性(通过GetAD-User?)。
以下是我估算的流程:
以下是用于测试目的的示例列表(另存为:csv_file.csv):
abc@abc.com
1abc@abc.com
a2bc@abc.com
a3bc@abc.com
a4bc@abc.com
ab5c@abc.com
这是我的代码:
$Name = @()
Get-Content -path "C:\Location\Of\Sample\Input\csv_file.csv" |
ForEach-Object {
Get-ADuser -filter * -properties
Mail, DisplayName, Department, Office | Select DisplayName, Department,
Office
}
当我运行此命令时,我会收到示例csv_file.csv中列出的每个电子邮件行的所有AD用户列表。
我的问题: 1.如何仅显示我的csv文件中列出其邮件属性的用户?例如,我列出了6封电子邮件,我应该只显示与这6个地址相关联的属性。 2.如何将.csv中列出的值与Get-ADUser中的.Mail属性进行比较?
示例输出: 超过60k + DisplayName,部门,Office记录!
我似乎很难理解powershell中的循环约束和过滤器。我确定我的问题的根源是-filter *,但应该是什么?如何适当地遍历每个地址?我引用了其他一些帖子,但似乎无法确定这种情况的具体内容。 建设性的批评非常感谢。 谢谢你的帮助!
答案 0 :(得分:1)
如果你正在运行Exchange,这会更快:
Get-Content -path "C:\Location\Of\Sample\Input\csv_file.csv" |
Get-Recipient |
Select DisplayName,Department,Office
AD不使用电子邮件地址作为索引标识引用,因此它必须在整个目录中搜索它循环的每个地址。 Exchange使用电子邮件地址作为索引来维护和维护自己的用户数据库,因此它可以直接提取电子邮件地址,而无需过滤。 Get-Recipient
cmdlet返回包含您要查找的属性的对象。
答案 1 :(得分:1)
这应该会给你你想要的结果。需要注意的一点是,我已经使用了“电子邮件地址”和“电子邮件地址”。而不是邮件'然后在当前的EmailAddress上进行过滤。
Get-Content -path "C:\Location\Of\Sample\Input\csv_file.csv" |
ForEach-Object {
Get-ADUser -Filter 'EmailAddress -eq $emailAddress' -Properties Department, DisplayName, EmailAddress | Select-Object DisplayName, Department, Office
}