【问题标题】:Import-CSV and Foreach to use Get-ADUserImport-CSV 和 Foreach 以使用 Get-ADUser
【发布时间】:2015-03-22 15:28:27
【问题描述】:

我有一个如下所示的 CSV 文件:

name    
fname1lname1@companyemail.com  
fname2lname2@companyemail.com  
...

我想遍历每个电子邮件地址并查询 AD 以获取该地址以获取用户对象 ID。我已经能够使用脚本来做到这一点,但我希望能够只使用一行来做到这一点。

这是我到目前为止所做的:

import-csv -path .\csv_file.csv | foreach-object { get-aduser -filter { proxyaddresses -like "*$_.name*} | select name } | out-file .\results.csv

这显然不起作用,我知道这与我在 foreach 循环中处理 $_ 对象的方式有关。

我希望输出看起来像:

fname1lname1@companyemail.com,userID1  
fname2lname2@companyemail.com,userID2
...

【问题讨论】:

    标签: powershell csv active-directory


    【解决方案1】:

    您正在过滤属性proxyaddresses,但它不是Get-AdUser 返回的默认属性集的一部分。此外,您的代码有错误的",这可能是复制粘贴错误。

    Import-CSV -Path .\csv_file.csv | ForEach-Object { 
        Get-ADUser -Filter "ProxyAddresses -like '*$($_.name)*'"  -Properties ProxyAddresses,EmailAddress | select EmailAddress,SamAccountName 
    } | Export-CSV .\results.csv -NoTypeInformation
    

    -Filter can be tricky 有时因为它正在寻找字符串输入。将整个内容用引号括起来并使用子表达式来确保变量$_.Name 被正确扩展并带有星号。

    由于您也在寻找emailaddress,我们也将其添加到属性列表中。我假设第二列是samaccountname

    我们还使用Export-CSV,因为这将产生漂亮的 CSV 输出。

    【讨论】:

    • 这非常有效。谢谢!我认为过滤器的东西真的让我失望。以后我一定要记住这一点。
    • 我整个上午都在尝试与此类似的事情,但无法为'*$($_.name)*'" 组件找到正确的语法......天赐良机! +1
    【解决方案2】:

    如果您使用 Exchange,如果您使用 Exchange cmdlet,这会更简单、更快捷:

    Import-CSV -Path .\csv_file.csv | ForEach-Object { 
    Get-Recipient $_ |
    Select PrimarySMTPAddress,SamAccountName 
    } | Export-CSV .\results.csv -NoTypeInformation
    

    Exchange 要求所有电子邮件地址都是唯一的,并维护自己的内部数据库,该数据库使用电子邮件地址作为主要索引,因此它几乎可以立即返回与该电子邮件地址相关的 DN 和 SamAccountName。

    AD 不要求它们是唯一的,因此它不会对该属性进行索引,并且它必须搜索每个用户对象,以查找在其代理地址集合中具有该电子邮件地址的用户对象。

    【讨论】:

      猜你喜欢
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      相关资源
      最近更新 更多