PowerShellでActiveDirectoryのグループに所属するユーザーの名前を取得する方法
仕事の方でPowerShellとActive Directory(以下AD)を扱うことがあったので、メモ程度に残しておきます。
今回はPowerShellのスクリプトファイル(.ps1)を作成し、ADグループに所属する全ユーザーの名前を取得しました。
実際に使用したコマンドは2種類あります。
①Get-ADGroupMember -Identity (グループ名) | select name
これでも問題無くユーザー名を取得出来ますが、注意しないといけないことが2つあります。
1つ目は、取得したデータ型がobject配列であることです。今回は取得した値をcsvで出力するためにjoinコマンドを使用しましたが、joinした結果は@{name=aa},@{name=bb}…という訳の分からない形となりました。string型に変換すると上のような値になるみたいです。
取得した値を加工する場合は気をつけてください。
2つ目は、大量のユーザーがいる場合にこのコマンドが使えないことです。
実際に①のコマンドを流した結果「この要求サイズを超過しました」とエラーが出てしまいました。
エラーが出てすぐはプログラムの仕方を疑いましたが、どうやら使用したコマンドが良くなかったようです。
②
$group = [ADSI]”LDAP://CN=(グループ名),DC=(ドメイン名)”
$group.Member() | foreach{([DirectoryServices.DirectoryEntry]$_).cn }
CNはグループ名を指定し、DCにはドメインを指定します。
1行目でグループの情報を取得してから、2行目はoreachでユーザーのCNを1つずつ取得しているようです。
LDAP://以下に必要なものは実際のグループを右クリック⇒プロパティ⇒属性の[distinguishedName]あたりに記載されていたかと思います。DCについては例えばgreenbear814.comの場合、DC=greenbear814,DC=comとなります。
このADSIを使用すれば、大量のユーザーがいる場合でも情報を取得できるようです!
PowerShellスクリプトもADについても、ここ最近3日間で1から勉強しながら作成しました。ご参考までにお使いください・・・