如何使用 powershell 和电子邮件地址从 AD 中提取用户名
Posted
技术标签:
【中文标题】如何使用 powershell 和电子邮件地址从 AD 中提取用户名【英文标题】:How can I pull usernames from AD using powershell and the email addresses 【发布时间】:2022-01-15 09:28:10 【问题描述】:我可以通过搜索电子邮件地址从 AD 中提取单个用户名,但我想从 CSV 中提取多个电子邮件地址并将它们记录到输出文件中。我知道我需要在这里扩大搜索范围:mail -eq 'john.smith@example.com'
使用诸如 -like
或变量之类的内容,但我很难找到解决方案。
代码:
$InputFile = 'C:\emailaddresses.csv'
$Outputfile = 'C:\usernames.csv'
Import-CSV -Path $InputFile
| ForEach-Object Get-ADUser -Filter mail -eq 'john.smith@example.com' | select SamAccountName
| Export-Csv $OutputFile -NoTypeInformation
【问题讨论】:
您当前的脚本有什么问题? 我正在尝试制作一个导入大量电子邮件地址的列表,并使用 get-ADuser 从 AD 中提取用户名并将其导出到 csv 文件。当前脚本仅提取我指定的单个地址的用户名。 您的emailaddresses.csv
文件应包含列名的标题。假设标题名为Email
。然后您的查询变为Get-ADUser -Filter "mail -eq '$($_.Email)'"
。 Foreach-Object
将每个流水线对象处理为$_
或$PSItem
。 $()
是必要的,因为您的过滤器字符串对内部的所有内容执行字符串扩展,将替换 $_
,然后将 .Email
附加到它。
@AdminOfThings 这有帮助,当然让我朝着正确的方向前进。现在,对于列表中的每个地址,我都会收到以下错误。 Error parsing query: 'mail 'john.smith@example.com'' Error Message: 'syntax error' at position: '6'. At line:1 char:48
您的过滤器中没有比较运算符。试试-Filter "mail -eq '$($_.Email)'"
【参考方案1】:
答案可能是间隔和 AD 调用是一个痛苦的注意 $Email
$InputFile = 'C:\emailaddresses.csv'
#assumption that header for the file above is email
$Outputfile = 'C:\usernames.csv'
Import-CSV -Path $InputFile | ForEach-Object
$email = $null
$email = $_.email
Get-ADUser -Filter mail -eq $email | Select-Object SamAccountName | Export-Csv $OutputFile -NoTypeInformation
我假设标题是第一个 csv 中的电子邮件,我不确定您是想要 -eq
还是 -like
,但我在这里的回答会让您到达那里。
我在我的机器上测试了它,它可以工作。
【讨论】:
以上是关于如何使用 powershell 和电子邮件地址从 AD 中提取用户名的主要内容,如果未能解决你的问题,请参考以下文章
使用 Powershell 查找 Lotus Notes 互联网电子邮件地址
如何在 PowerShell 中使用 S/MIME 对消息进行签名和加密