显示名称列表中需要的电子邮件地址
问题描述:
我试图通过PowerShell搜索AD以获取基于显示名称的电子邮件地址。显示名称是我必须参考的唯一的东西。显示名称列表中需要的电子邮件地址
的CSV列标题是
DisplayName "John,Doe"
这里是我运行该脚本:
$arrayDisplayNames = Import-Csv C:\3\names.csv
foreach ($objectDisplayName in $arrayDisplayNames) {
Get-Member -InputObject $objectDisplayName
$objectDisplayName.DisplayName
$stringFirstName = $objectDisplayName.DisplayName.Split(",")[0]
$stringLastName = $objectDisplayName.DisplayName.Split(",")[1]
$objectUserFromDisplay = Get-ADuser $objectDisplayName.DisplayName -Properties EmailAddress, mail
$objectUserFromFirstLast = Get-Aduser -Filter "givenName -like '$stringFirstName' -and sn -like '$stringLastName'" -Properties EmailAddress, mail
}
这里是我的错误:
Get-ADuser : Cannot find an object with identity: 'John,Doe' under: 'DC=jungle,DC=com'. At line:10 char:26 + ... omDisplay = Get-ADuser $objectDisplayName.DisplayName -Properties Ema ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (John,Doe:ADUser) [Get-ADUser], ADIdentityNotFoundException + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.ActiveDirectory.Management.Commands.GetADUser Get-Aduser : The search filter cannot be recognized At line:12 char:28 + ... FirstLast = Get-Aduser -Filter "givenName -like '$stringFirstName' -a ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Get-ADUser], ADException + FullyQualifiedErrorId : ActiveDirectoryServer:8254,Microsoft.ActiveDirectory.Management.Commands.GetADUser
答
这条线是错误的。您正在尝试将显示名称作为输入放入为UserID保留的位置参数。因此,在第10行
$objectUserFromDisplay = Get-ADuser $objectDisplayName.DisplayName -Properties EmailAddress, mail
变化的第一个错误这:
虽然,我怀疑你会得到什么结果,从这个,因为你的显示名称字段“”它和一个具有可能不是你的AD如何保存显示名称。删除此行,或者使用从FirstName和LastName组件创建的显示名称,并在其间使用空格。例如:$DisplayName = "$stringFirstName stringLastName"
第12行的第二个错误,我认为是因为对FirstName和LastName做了不恰当的分割。否则,代码是准确的。
改成这样:
$stringFirstName = ($objectDisplayName.DisplayName).Split(",")[0]
$stringLastName = ($objectDisplayName.DisplayName).Split(",")[1]
你也可能要更改-like
到-eq
,因为你正在寻找缩小比返回AD一切能找到的搜索结果。
答
只是建立在Rohin的答案上,我已经删除了逗号字符并放置了下面可以使用的脚本,注意到我能够使用Active Directory进行测试并验证它是否返回结果。
foreach ($objectDisplayName in $arrayDisplayNames) {
$stringFirstName = ($objectDisplayName.DisplayName).Split(",")[0]
$stringLastName = ($objectDisplayName.DisplayName).Split(",")[1]
# remove , character
$StringDisplayName = $objectDisplayName.DisplayName -replace ",", " "
$objectUserFromDisplay = Get-ADuser -Filter "Name -like '$StringDisplayName'" -Properties EmailAddress, mail
$objectUserFromDisplay|Select-object Name,EmailAddress,mail
}