ゆーたの旅日記

名古屋から行く国内旅行が中心の旅日記です

PowerShellでActiveDirectoryのグループに所属するユーザーの名前を取得する方法

仕事の方でPowerShellとActive Directory(以下AD)を扱うことがあったので、メモ程度に残しておきます。

 

今回はPowerShellのスクリプトファイル(.ps1)を作成し、ADグループに所属する全ユーザーの名前を取得しました。

  

実際に使用したコマンドは2種類あります。

Get-ADGroupMember -Identity (グループ名) | select name

f:id:greenbear814:20181130215746p:plain

 

これでも問題無くユーザー名を取得出来ますが、注意しないといけないことが2つあります。

1つ目は、取得したデータ型がobject配列であることです。今回は取得した値をcsvで出力するためにjoinコマンドを使用しましたが、joinした結果は@{name=aa},@{name=bb}…という訳の分からない形となりました。string型に変換すると上のような値になるみたいです。

取得した値を加工する場合は気をつけてください。

 

2つ目は、大量のユーザーがいる場合にこのコマンドが使えないことです。

実際に①のコマンドを流した結果「この要求サイズを超過しました」とエラーが出てしまいました。

エラーが出てすぐはプログラムの仕方を疑いましたが、どうやら使用したコマンドが良くなかったようです。

 

 

$group = [ADSI]”LDAP://CN=(グループ名),DC=(ドメイン名)”

$group.Member() |  foreach{([DirectoryServices.DirectoryEntry]$_).cn }

f:id:greenbear814:20181130220756p:plain

 

CNはグループ名を指定し、DCにはドメインを指定します。

1行目でグループの情報を取得してから、2行目はoreachでユーザーのCNを1つずつ取得しているようです。

LDAP://以下に必要なものは実際のグループを右クリック⇒プロパティ⇒属性の[distinguishedName]あたりに記載されていたかと思います。DCについては例えばgreenbear814.comの場合、DC=greenbear814,DC=comとなります。

 

このADSIを使用すれば、大量のユーザーがいる場合でも情報を取得できるようです!

 

PowerShellスクリプトもADについても、ここ最近3日間で1から勉強しながら作成しました。ご参考までにお使いください・・・