1. ホーム
  2. powershell

[解決済み] Get-ADUser でのエラー: 無効な列挙コンテキスト

2022-02-16 18:52:10

質問

先日、こんな質問を投稿しました。 グループ化されたオブジェクトから電子メールを抽出する

$OuUser = @{}

$OuUser = Get-AdUser -Properties * -Filter * -SearchBase "domain"   

$Duplicates = $OuUser | Select samaccountname, mail,UserPrincipalName |
    Group-Object Mail | Where{$_.Count -gt 1}

$Duplicates | Select Name,Count,@{l='Accounts';e={($_.Group|Select -Expand samaccountname) -join ';'}} | 
    Export-CSV E:\Damo\Duplicates.csv -NoTypeInfo

コードは1つのドメインで正常に動作し、OUの小さなユーザーセットに対してそれをテストしています。

私がテストしたいドメインでテストすると、そのドメインには多くのユーザーがいるため、このコードは失敗します。OUには、電子メール形式でない電子メールアドレスが含まれています。これは、エラーのためにGet-ADUserの方を指しています。

Get-ADUser : The server has returned the following error: invalid enumeration c
ontext.
At C:\scripts\CountEmailsDup.ps1:4 char:21
+ $OuUser = Get-AdUser <<<<  -Properties * -Filter * -SearchBase 'ou=external,o
u=user accounts,dc=bizdir,dc=nzpost,dc=co,dc=nz' -SearchScope OneLevel
    + CategoryInfo          : NotSpecified: (:) [Get-ADUser], ADException
    + FullyQualifiedErrorId : The server has returned the following error: inv
   alid enumeration context.,Microsoft.ActiveDirectory.Management.Commands.Ge
  tADUser

なぜ、あるドメインではこのエラーが発生し、別のドメインでは発生しないのか、わからなくなっています。

どうすればいいですか?

ここでの最大の問題は、あなたが以下のようなことを要求していることです。 Get-ADUser . あなたのコメントからすると、90万以上のアカウントを引っ張ってきていることになります。その上、これらのユーザーのすべてのプロパティを引っ張ってきているのです。狂気の沙汰としか言いようがありません。

このエラーが何を意味するのか完全には分かりませんが、このエラーが発生する人は皆、多くのユーザーを返していることは分かっており、あなたは明らかにそうだと思います。これを軽減するための最初のステップは -ResultPageSizeGet-ADUser . あなたのマイレージは変わるかもしれませんが、返すべきレコードの数を実験する必要があります。通常、500~1000件が良いスタートとなります。

私は決して -Properties * 一人のユーザーのために引っ張っていて、すべてを見たいというのでなければ。あなたの関数で、これらのプロパティをすべて使っているのか、私は強く疑問に思います。効率化のために、必要なものだけに絞りましょう。そのためには Mail .

に基づいて処理しているので mail プロパティに入力されたメールプロパティのみを持つものに結果を限定することもできます。例えば、以下のようなフィルターがあります。 ", ".... "(Vesperのコメントより)または " @ というコメントから、" としました。

メールフィールドに123や.が入っているものがあるので、length -gt 3とかでスキップする必要がありそうです。

しかし、パイプラインを使用することで、パイプで使用するために結果を保存する代わりに、物事を進めることができるはずです。

Get-AdUser -Properties mail -Filter 'mail -like "*@*"' -SearchBase "domain" -ResultPageSize 1000 | 
    Group-Object Mail | 
    Where{$_.Count -gt 1} |
    Select Name,Count,@{l='Accounts';e={($_.Group|Select -Expand samaccountname) -join ';'}} | 
    Export-CSV E:\Damo\Duplicates.csv -NoTypeInfo