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.


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.


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

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

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 *

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
  }
}   
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.