Daftar Semua Grup dan Anggota Mereka dengan PowerShell di Win2008r2

14

Saya baru mengenal PowerShell, tetapi saya sudah membaca manual dan sedikit berlatih. Tujuan saya adalah untuk Mendaftar semua pengguna di semua Grup Keamanan di bawah jalur yang ditentukan. Saya telah menemukan cara untuk melakukannya:

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

Tetapi masalahnya adalah saya tidak melihat nama grup. Yang saya dapatkan hanyalah sekelompok pengguna. Alangkah baiknya jika seseorang dapat memberi tahu saya cara menampilkan nama grup sebelum semua anggota grup ini terdaftar. Terima kasih.

Alec T
sumber
2
Jika Anda bermain-main dengan mengubah setelah basis pencarian untuk % { "GroupName: $($_.Name)"; "==========" ; Get-ADGroupMember $_ } | ft namemaka Anda mungkin mendapatkan apa yang Anda cari juga. Jawaban Ryan masih lebih baik, tetapi itu satu baris jika Anda menginginkannya.
TheCleaner
Terima kasih TheCleaner. Seperti yang saya katakan saya baru di PS, tetapi contoh-contoh ini sangat membantu dalam memahami.
Alec T
Teladan Anda juga sangat bagus!
Alec T

Jawaban:

26

Gimme the codes! kekuatan, aktifkan!

$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
}

Intinya, luangkan waktu Anda dan bagikan menjadi beberapa langkah. Saya tahu bahwa menyenangkan untuk mencoba mendapatkan segalanya dan wastafel dapur agar sesuai dengan satu-liner dengan Powershell, tetapi itu sama sekali tidak diperlukan.

Beberapa catatan:

  • Anda tidak perlu melakukannya Get-ADGroupMemberjika Anda mengumpulkan properti Anggota di Get-ADGroupCmdlet awal . Hal yang baik tentang ini adalah ia membagi dua jumlah panggilan yang harus Anda buat ke AD, yang seharusnya membuat skrip Anda berjalan lebih cepat, dan itu meringankan beban pada kontroler domain.

  • $ G. Anggota akan menampilkan semua anggota grup $ G ... di Powershell 3. Di Powershell 2, Anda mungkin masih perlu menempatkan Foreach lain di dalam Foreach di sana untuk menghitung melalui anggota grup. ( Yo dawg, aku mendengar kamu suka loop ... )

  • Saya menggunakan di Write-Hostsini, yang kotor. Anda seharusnya tidak pernah benar-benar menggunakannya Write-Host. Alih-alih, Anda seharusnya membangun dan mengeluarkan objek, bukan teks, tapi itu adalah topik lain dan saya terlalu malas untuk melakukannya untuk jawaban ini.

Ryan Ries
sumber
10

Inilah solusi yang jauh lebih baik. Ini akan meletakkan semuanya dalam csv 3 kolom dengan nama grup, nama pengguna, dan nama akun sam. Jauh lebih mudah untuk mengetahui grup seseorang saat ada 400 pengguna dalam grup karena Anda tidak perlu menggulir.

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
Joseph Alves
sumber
Mungkin mungkin menambahkan 400 pengguna dalam grup dan menangkap data dari file csv atau xlsx?
Kiquenet
maaf atas ketidaktahuan saya tetapi, apa kode Anda?
ScottC
maaf atas keterlambatan komentar saya tetapi PowerShell adalah bahasa
Riley Carney
1

Saya harus menambahkan .namesetelah $groupmembuat ini bekerja untuk saya.

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

Jika Anda pernah mengalami Size Limitmasalah dengan grup yang berisi lebih dari 5000 anggota, Anda dapat mengubah satu baris sebagai berikut:

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

Berikut adalah skrip yang mengekspor semua grup dalam OU ke file terpisah untuk setiap grup dengan nama dan deskripsi grup. Jika seseorang menginginkan itu ..

$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
  }
}   
}
Magneg
sumber