Win2008r2에서 PowerShell을 사용하여 모든 그룹 및 구성원 나열


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다음 작업을 수행하면 원하는 정보를 얻을 수 있습니다. Ryan의 대답은 여전히 ​​낫지 만 원한다면 한 줄입니다.
TheCleaner

TheCleaner 감사합니다. 내가 말했듯이 PS를 처음 사용하지만이 예제는 실제로 이해하는 데 도움이됩니다.
Alec T

귀하의 예도 훌륭하게 작동합니다!
Alec 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 에서 Members 속성을 수집하는 경우 수행 할 필요가 없습니다 . 이것에 대한 좋은 점은 AD 호출 횟수를 반으로 줄여서 스크립트 실행 속도를 높이고 도메인 컨트롤러의 부담을 덜어 준다는 것입니다.

  • $ G.Members는 Powershell 3에서 $ G ... 그룹의 모든 구성원을 표시합니다. Powershell 2에서는 그룹 구성원을 열거하기 위해 Foreach 내부에 다른 Foreach를 배치해야 할 수도 있습니다. ( Yo dawg, 나는 당신이 루프를 좋아한다고 들었습니다 ... )

  • 나는 Write-Host여기서 사용 합니다. 당신은 정말로 사용해서는 안됩니다 Write-Host. 대신 텍스트가 아닌 객체를 작성하고 출력해야하지만 완전히 다른 주제 였으므로이 답변을 위해 너무 게 으르 았습니다.


10

훨씬 더 나은 해결책이 있습니다. 이렇게하면 그룹 이름, 사용자 이름 및 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

어쩌면 그룹 400 명의 사용자를 추가 하고 csv 또는 xlsx 파일에서 데이터를 잡을 수 있습니까?
Kiquenet

내 무지에 대해 죄송하지만 코드가 어떤 언어입니까?
ScottC

미안 내 의견은 지각하지만 PowerShell은 언어 였기
라일리 카니

1

내가 추가 한 .name$group나를 위해이 작업을 할 수 있습니다.

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

0

Size Limit5000 명 이상의 구성원을 포함하는 그룹 에서 문제가 발생하면 다음과 같이 한 줄을 변경할 수 있습니다.

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