Powershellは初めてですが、マニュアルを読んだり、少し練習したりしています。私の目的は、指定されたパスの下にあるすべてのセキュリティグループのすべてのユーザーを一覧表示することです。私はそれを行う方法を見つけました:
get-adgroup -Filter * -SearchBase "OU=Groups,DC=corp,DC=ourcompany,DC=Com" | %{Get-ADGroupMember $_.name} | ft name
しかし問題は、グループ名が表示されないことです。私が得るすべてはユーザーの束です。このグループのすべてのメンバーがリストされる前に、誰かがグループ名を表示する方法を教えてもらえたらいいですね。ありがとう。
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
を実際に使用しないでください。代わりに、テキストではなくオブジェクトを作成して出力する必要がありますが、それはまったく別のトピックであり、私はこの答えに対してそれを行うのが面倒でした。
これははるかに良い解決策です。これは、グループ名、ユーザー名、および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
追加しなければならなかった.name
後$group
これを機能させるために。
$Arrayofmembers = Get-ADGroupMember -identity $Group.name -recursive | select name,samaccountname
以下は、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
}
}
}
5000を超えるメンバーを含むグループでSize Limit
の問題が発生した場合は、次のように1行を変更できます。
$Arrayofmembers = (Get-ADGroup $Group -Properties member).member | Get-ADUser -Properties *