导入电子邮件列表(.csv),循环浏览每封电子邮件并提供相应的Get-ADuser属性并导出

时间:2017-12-20 19:15:38

标签: powershell csv foreach scripting

我有一种情况需要在.csv中列出电子邮件列表,导入列表并从Active Directory中提取适用的属性(通过GetAD-User?)。

以下是我估算的流程:

  1. 导入.csv电子邮件列表
  2. 使用循环遍历每一行。
  3. 将数据传输到Get-ADUser(通过-filter)并返回相应的属性。
  4. 以下是用于测试目的的示例列表(另存为: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 *,但应该是什么?如何适当地遍历每个地址?我引用了其他一些帖子,但似乎无法确定这种情况的具体内容。 建设性的批评非常感谢。 谢谢你的帮助!

2 个答案:

答案 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
}