2017-09-24 4 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 

変更でそのための最初のエラーこれまで:、私はあなたのDisplayNameフィールドは「」それにしていることがあるので、あなたがこのことからどんな結果を得ることはないだろうが、

​​

あなたの広告が表示名をどのように保存しているのかはおそらく分かりません。この行を削除するか、FirstNameおよびLastNameコンポーネントから作成した表示名をスペースを使用して使用します。例:$DisplayName = "$stringFirstName stringLastName"

12行目の2番目のエラーは、FirstNameとLastNameで不適切な分割が行われたためです。さもなければ、コードは正確です。これに

変更:

$stringFirstName = ($objectDisplayName.DisplayName).Split(",")[0] 
$stringLastName = ($objectDisplayName.DisplayName).Split(",")[1] 

はまた、あなたが見つけることができるすべてのADを返すよりも、検索結果を絞り込むために探しているので、-eq-likeを変更する場合があります。

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 
} 
関連する問題