トップ回答者
ADGroupとADGroupメンバーの一覧

質問
回答
-
> メンバーが多い場合、「...」で省略されてしまうグループがかなりあります。こちらを省略せずに出力することは可能でしょうか?
やり方は色々あると思いますが、例えば以下のような感じでしょうか。
Get-ADGroup -Filter *| select Name, @{Label = "MemberNames"; Expression = {($_| Get-ADGroupMember| select -ExpandProperty Name) -join ","}}| Format-List
上記の例ではグループ名とメンバー名以外のプロパティの出力は省略しています。必要であれば、select Name, @{...となってるところを select *, @{...として下さい。
なおファイルに出力するときはFormat-ListではなくExport-Csv等を使います。
Get-AdGroup -Properties Membersでもメンバー一覧は取れますが、識別名の文字列配列として返ってくるので、Name等他のプロパティを取るのにどのみち他のコマンドレットが必要になるので、上記のようにGet-ADGroupMember併用で良いかと思います。
(やきさんがご指摘のMemberOfプロパティは、グループが属するグループ名を取るものかと思います)>■出力例1
>■出力例2
一例として以下のようなスクリプトを挙げます。
# 出力例1 Get-ADGroup -Filter *| foreach{ Write-Host $_.Name $_| Get-ADGroupMember| foreach {Write-Host $_.Name} Write-Host } # 出力例2 Get-ADGroup -Filter *| foreach{ $group = $_.Name $_| Get-ADGroupMember| foreach {Write-Host "$group,$($_.Name)"} }
上記スクリプトでは表示にWrite-Hostコマンドレットを使っていますが、文字列として変数に入れたり、パイプラインを通じてSet-Contentコマンドレット等でファイルに書き出す場合は、Write-Outputコマンドレットに変えてください。
この辺りになると、ちょっとPowerShellのきまりや構文の知識が必要になってくるかもしれません。
- 回答としてマーク kick. _ 2016年6月2日 9:14
すべての返信
-
牟田口さん
ご回答ありがとうございます。配列への追加がまさにやりたかったことです。
記載頂いたコマンド実行により、取得したい結果が返ってきますが、1点教えて頂けますか?- メンバーが多い場合、「...」で省略されてしまうグループがかなりあります。こちらを省略せずに出力することは可能でしょうか?
># それとも、グループと、当該グループに属するメンバーリストをフラットな形で出力したいということでしょうか?
また上記についても後学のため併せて教えて頂けないでしょうか?
以下のような出力形式も行いたいと考えています。■出力例1
GroupA
User1
User2
User3
GroupB
User4
GroupC
User5
User6■出力例2
GroupA,User1
GroupA,User2
GroupA,User3
GroupB,User4
GroupC,User5
GroupC,User6よろしくお願いいたします。
-
> メンバーが多い場合、「...」で省略されてしまうグループがかなりあります。こちらを省略せずに出力することは可能でしょうか?
やり方は色々あると思いますが、例えば以下のような感じでしょうか。
Get-ADGroup -Filter *| select Name, @{Label = "MemberNames"; Expression = {($_| Get-ADGroupMember| select -ExpandProperty Name) -join ","}}| Format-List
上記の例ではグループ名とメンバー名以外のプロパティの出力は省略しています。必要であれば、select Name, @{...となってるところを select *, @{...として下さい。
なおファイルに出力するときはFormat-ListではなくExport-Csv等を使います。
Get-AdGroup -Properties Membersでもメンバー一覧は取れますが、識別名の文字列配列として返ってくるので、Name等他のプロパティを取るのにどのみち他のコマンドレットが必要になるので、上記のようにGet-ADGroupMember併用で良いかと思います。
(やきさんがご指摘のMemberOfプロパティは、グループが属するグループ名を取るものかと思います)>■出力例1
>■出力例2
一例として以下のようなスクリプトを挙げます。
# 出力例1 Get-ADGroup -Filter *| foreach{ Write-Host $_.Name $_| Get-ADGroupMember| foreach {Write-Host $_.Name} Write-Host } # 出力例2 Get-ADGroup -Filter *| foreach{ $group = $_.Name $_| Get-ADGroupMember| foreach {Write-Host "$group,$($_.Name)"} }
上記スクリプトでは表示にWrite-Hostコマンドレットを使っていますが、文字列として変数に入れたり、パイプラインを通じてSet-Contentコマンドレット等でファイルに書き出す場合は、Write-Outputコマンドレットに変えてください。
この辺りになると、ちょっとPowerShellのきまりや構文の知識が必要になってくるかもしれません。
- 回答としてマーク kick. _ 2016年6月2日 9:14
-
出力例2 ですが一例としてこんな感じでは如何でしょうか?
$results = @() $results += "グループ名称,グループ説明,アカウント,名前,アカウント説明" # グループ一覧を取得 $group_results = Get-ADGroup -Filter * -SearchBase "OU=XXXX,dc=YYYY,dc=local" -Property Description | select Name, Description | sort-object -property Name foreach($group_result in $group_results){ # 所属ユーザ一覧を取得 $user_results = Get-ADGroupMember -Identity $group_result.Name | select Name, objectClass | sort-object -property Name foreach($user_result in $user_results){ if($user_result.objectClass -like "*user*"){ # ユーザ情報を取得 $username = Get-ADUser -Identity $user_result.Name -Property DisplayName, Description | select Name, DisplayName, Description | sort-object -property Description, Name $results += $group_result.Name + "," + $group_result.Description + "," + $user_result.Name + "," + $username.DisplayName + $username.Description }else{ $results += $group_result.Name + "," + $group_result.Description + "," + $user_result.Name + ",[グループ]," } } } # 結果をファイルに出力 $outputFileName = ".ADGroupUserList" + (Get-Date).ToString("yyyyMMddHHmmss") + ".csv" $results | Out-File -FilePath $outputFileName -Encoding utf8
-
$groups = Get-ADGroup "hoge" -Properties memberof
とした場合、DNからグループ名だけ欲しい場合は
$memberof -replace "^CN=([^,]*),.*","`$1"
です。
ただ出力例を見るとグループが属しているグループというより、誰がグループに属しているかを知りたいようですので
Get-ADGroup "hoge" -Properties Members
とすることで取れます。
その他であれば
Get-ADGroup "hoge" -Properties *
を確認し、お好みの属性を参照ください。