导入 CSV 和 Foreach 以使用 Get-ADUser
Import-CSV and Foreach to use Get-ADUser
我有一个如下所示的 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
...
您正在过滤 属性 proxyaddresses
,但这不是 属性 Get-AdUser
returns 的默认设置的一部分。此外,您的代码有一个错误 "
,这可能是复制粘贴错误。
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 输出。
如果您使用的是 Exchange,则使用 Exchange cmdlet 会更简单、更快捷:
Import-CSV -Path .\csv_file.csv | ForEach-Object {
Get-Recipient $_ |
Select PrimarySMTPAddress,SamAccountName
} | Export-CSV .\results.csv -NoTypeInformation
Exchange 要求所有电子邮件地址都是唯一的,并维护自己的内部数据库,该数据库使用电子邮件地址作为主要索引,因此它几乎可以 return 与该电子邮件地址对应的 DN 和 SamAccountName。
AD 不要求它们是唯一的,因此它不会在该属性上建立索引,它必须搜索每个用户对象以查找其代理地址集合中具有该电子邮件地址的对象。
我有一个如下所示的 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
...
您正在过滤 属性 proxyaddresses
,但这不是 属性 Get-AdUser
returns 的默认设置的一部分。此外,您的代码有一个错误 "
,这可能是复制粘贴错误。
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 输出。
如果您使用的是 Exchange,则使用 Exchange cmdlet 会更简单、更快捷:
Import-CSV -Path .\csv_file.csv | ForEach-Object {
Get-Recipient $_ |
Select PrimarySMTPAddress,SamAccountName
} | Export-CSV .\results.csv -NoTypeInformation
Exchange 要求所有电子邮件地址都是唯一的,并维护自己的内部数据库,该数据库使用电子邮件地址作为主要索引,因此它几乎可以 return 与该电子邮件地址对应的 DN 和 SamAccountName。
AD 不要求它们是唯一的,因此它不会在该属性上建立索引,它必须搜索每个用户对象以查找其代理地址集合中具有该电子邮件地址的对象。