Win2008r2でPowerShellを使用してすべてのグループとそのメンバーを一覧表示する


14

私はPowerShellの初心者ですが、マニュアルを読んで少し練習しました。私の目的は、指定したパスの下にあるすべてのセキュリティグループのすべてのユーザーを一覧表示することです。私はそれを行う方法を見つけました:

 get-adgroup -Filter * -SearchBase "OU=Groups,DC=corp,DC=ourcompany,DC=Com"  | %{Get-ADGroupMember $_.name} | ft name

しかし、問題はグループ名が表示されないことです。私が得るのは、たくさんのユーザーです。このグループのすべてのメンバーがリストされる前に、誰かがグループ名を表示する方法を教えてくれたら嬉しいです。ありがとう。


2
検索ベースの後に変更することで遊んでいるなら、あなた% { "GroupName: $($_.Name)"; "==========" ; Get-ADGroupMember $_ } | ft nameもあなたが望むものを手に入れるかもしれません。ライアンの答えは依然として優れていますが、それが必要な場合は1行です。
TheCleaner

TheCleanerに感謝します。私が言ったように、PSは初めてですが、これらの例は本当に理解に役立ちます。
アレックT

あなたの例もうまくいきます!
アレックT

回答:


26

Gimme the codes! パワーズ、アクティベート!

$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=Groups,DC=corp,DC=ourcompany,DC=Com" 
Foreach($G In $Groups)
{
    Write-Host $G.Name
    Write-Host "-------------"
    $G.Members
}

要は、時間をかけてステップに分割するだけです。Powershellを使用して、すべてのものと台所の流し台を1ライナーに収まるようにしようとするのは楽しいことですが、必ずしも必要ではありません。

いくつかのメモ:

  • Get-ADGroupMember最初のGet-ADGroupコマンドレットでMembersプロパティを収集する場合は、行う必要はありません。これの良い点は、ADに対して行わなければならない呼び出しの量が半分になることです。これにより、スクリプトの実行が速くなり、ドメインコントローラーの負担が軽減されます。

  • $ G.Membersは、Powershell 3のグループ$ G ...のすべてのメンバーを表示します。Powershell2では、グループメンバーを列挙するために、Foreach内に別のForeachを配置する必要があります。(ヨ・ダウグ、ループが好きだと聞いた...

  • 私はWrite-Hostここで使用しますが、これは大げさです。本当に使用しないでくださいWrite-Host。代わりに、テキストではなくオブジェクトを構築して出力する必要がありますが、それはまったく別のトピックであり、この答えに対してそれを行うにはあまりにも面倒でした。


10

これがはるかに優れたソリューションです。これにより、すべてがグループ名、ユーザー名、およびsamアカウント名を含む3列のcsvに配置されます。スクロールする必要がないため、グループに400人のユーザーがいる場合、誰かがどのグループに属しているかを簡単に把握できます。

Import-Module ActiveDirectory

$Groups = (Get-AdGroup -filter * | Where {$_.name -like "**"} | select name -ExpandProperty name)

$Table = @()

$Record = @{
  "Group Name" = ""
  "Name" = ""
  "Username" = ""
}


Foreach ($Group in $Groups) {

  $Arrayofmembers = Get-ADGroupMember -identity $Group -recursive | select name,samaccountname

  foreach ($Member in $Arrayofmembers) {
    $Record."Group Name" = $Group
    $Record."Name" = $Member.name
    $Record."UserName" = $Member.samaccountname
    $objRecord = New-Object PSObject -property $Record
    $Table += $objrecord

  }
}

$Table | export-csv "C:\temp\SecurityGroups.csv" -NoTypeInformation

グループに400人のユーザーを追加して、csvまたはxlsxファイルからデータをキャッチすることは可能ですか?
Kiquenet

私の無知のために申し訳ありませんが、あなたのコードはどの言語にありますか?
-ScottC

私のコメントが遅れて申し訳ありませんが、パワーシェルが言語でした
ライリーカーニー

1

私のためにこの仕事をするために.name後から追加$groupする必要がありました。

$Arrayofmembers = Get-ADGroupMember -identity $Group.name -recursive | select name,samaccountname

0

Size Limit5000を超えるメンバーを含むグループで問題が発生した場合、次のように1行を変更できます。

$Arrayofmembers = (Get-ADGroup $Group -Properties member).member | Get-ADUser -Properties *

0

以下は、OU内のすべてのグループを、グループ名と説明とともに各グループの個別のファイルにエクスポートするスクリプトです。誰かがそれを望むなら..

$groups = Get-ADGroup -filter * -SearchBase "OU=XXX, DC=XX,DC=XX"
ForEach ($g in $groups) 
{
$path = "c:\scripts\" + $g.Name + ".csv"
Get-ADGroup -Identity $g.Name -Properties * | select name,description | Out-File $path -Append

$results = Get-ADGroupMember -Identity $g.Name -Recursive | Get-ADUser -Properties displayname, name 

ForEach ($r in $results){
New-Object PSObject -Property @{       

    DisplayName = $r.displayname | Out-File $path -Append
  }
}   
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.