2017-09-24 180 views
0

我試圖通過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 

回答

0

這條線是錯誤的。您正在嘗試將顯示名稱作爲輸入放入爲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一切能找到的搜索結果。

0

只是建立在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 
} 
相關問題