警察です、ここの事業所に Aさんという方はいますか?
お調べしますね。 ここの事業所には W1 と W2 と W3 の 3つ事業本部が所属しています。どの事業本部をお調べしますか? W1 ですね。
お調べしますね。 W1 事業本部には 4つの部がありますね。
・・・
・・・
・・・
・・・
Aさんはここの事業所ので所属はなく、ここの事業所の W3事業本部の X5部の Y2課の Z1係の所属ですね。
これが Z1係の従業員リストです。 どうぞ。
警察です、ここの事業所の全従業員のリストをください
はいどうぞ、全従業員です。たらい回しもイヤだ。 かといって全部から調べるのもイヤだ。 というかハッキリと答えてほしい
Get-ADGroupMember -Identity <グループ名>これで取れるのは指定したグループに直接参加しているユーザーやグループの一覧なので、参加しているグループのメンバーの名前はでてこない。
Get-ADGroupMember -Identity <グループ名> -Recursiveこれで指定したグループに参加しているグループに参加しているグループに参加しているメンバーのように間接的に参加しているメンバー全員をリストアップできる。
でも YES か NO で答えが知りたい。
Get-ADGroupMember は Microsoft.ActiveDirectory.Management.ADPrincipal 型のオブジェクトか、その配列を返すので DistinguishedName とか SamAccountName とか SID とか持っているようです。
比較側のユーザーは普通に Get-ADUser で取得。 これももちろん同じプロパティを持ってる。
(Get-ADGroupMember -Identity <グループ名> -Recursive | Select-Object -ExpandProperty DistinguishedName) -Contains (Get-ADUser -Identity <ユーザー名>).DistinguishedNameこれで Get-ADGroupMember から返ってきた DistinguishedName の配列と Get-ADUser から返っていた DistinguishedName を比較でき、含まれているかどうかを True / False で調べられるようになった。
本質を理解していないのでイロイロ遊んでみたら、Get-AdUser 側は DsitinguishedName を引き合いに出さなくても行けました。
(Get-ADGroupMember -Identity <グループ名> -Recursive | Select-Object -ExpandProperty DistinguishedName) -Contains (Get-ADUser -Identity <ユーザー名>)そういうものなのかと理解したつもりになって、ついでに引数名 -Identity も省略してみたけど、これでも行けますね。 -Identity はデフォルトの引数だったかね。
(Get-ADGroupMember <グループ名> -Recursive | Select-Object -ExpandProperty DistinguishedName) -Contains (Get-ADUser <ユーザー名>)さらに冒険してみた。
Select-Object でプロパティ展開する部分は -ExpandProperty を使うのだけれど、文字が長いとか -ExcludeProperty と間違うとか、意外に嫌われているようで、Select-Object の替わりに ForEach-Object を使う事もできるんだそうな。
(Get-ADGroupMember <グループ名> -Recursive | ForEach-Object DistinguishedName) -Contains (Get-ADUser <ユーザー名>)奥が深いというか、、、
コメント