web-dev-qa-db-ja.com

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

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

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

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

14
Alec T

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を使用して、すべてとキッチンシンクをワンライナーに収めるのは楽しいことですが、それが必須というわけではありません。

いくつかのメモ:

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

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

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

26
Ryan Ries

これははるかに良い解決策です。これは、グループ名、ユーザー名、および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
10
Joseph Alves

追加しなければならなかった.name$groupこれを機能させるために。

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

以下は、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
  }
}   
}
0
Magneg

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

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