รายชื่อกลุ่มทั้งหมดและสมาชิกของพวกเขาด้วย PowerShell ใน Win2008r2


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แล้วคุณอาจได้รับสิ่งที่คุณเป็นเช่นกัน คำตอบของไรอันยังดีกว่า แต่ก็เป็นบรรทัดเดียวถ้าคุณต้องการ
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 แต่ก็ไม่จำเป็นต้องทำ

หมายเหตุเล็กน้อย:

  • คุณไม่จำเป็นต้องทำGet-ADGroupMemberถ้าคุณรวบรวมคุณสมบัติสมาชิกในGet-ADGroupCmdlet เริ่มต้น สิ่งที่ดีเกี่ยวกับสิ่งนี้คือมันลดจำนวนการโทรที่คุณต้องทำกับโฆษณาซึ่งจะทำให้สคริปต์ของคุณทำงานได้เร็วขึ้นและแบ่งเบาภาระในตัวควบคุมโดเมน

  • $ G.Members จะแสดงสมาชิกทั้งหมดของกลุ่ม $ G ... ใน Powershell 3 ใน Powershell 2 คุณอาจต้องใส่ Foreach อีกอันไว้ใน Foreach ที่นั่นเพื่อแจกแจงผ่านสมาชิกกลุ่ม ( Yo dawg ฉันได้ยินมาว่าคุณชอบลูป ... )

  • ฉันใช้Write-Hostที่นี่ซึ่งเป็นขั้นต้น Write-Hostคุณไม่ควรใช้จริงๆ แต่คุณควรสร้างและส่งออกวัตถุไม่ใช่ข้อความ แต่นั่นเป็นหัวข้ออื่นทั้งหมดและฉันก็ขี้เกียจเกินกว่าจะทำเช่นนั้นสำหรับคำตอบนี้


10

นี่คือทางออกที่ดีกว่ามาก สิ่งนี้จะใส่ทุกอย่างในคอลัมน์ 3 คอลัมน์ด้วยชื่อกลุ่มชื่อผู้ใช้และชื่อบัญชี sam ง่ายมากที่จะคิดออกว่ามีใครบางคนในกลุ่มเมื่อมีผู้ใช้ 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

ขออภัยสำหรับความคิดเห็นของฉันความล่าช้า แต่ PowerShell เป็นภาษา
Riley Carney


0

หากคุณเคยเจอSize Limitปัญหากับกลุ่มที่มีสมาชิกมากกว่า 5,000 คนคุณสามารถเปลี่ยนหนึ่งบรรทัดดังนี้:

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