Listar todos os grupos e seus membros com o PowerShell no Win2008r2

11

Eu sou novo no powershell, mas tenho lido manuais e praticado um pouco. Meu objetivo é listar todos os usuários em todos os grupos de segurança no caminho especificado. Eu encontrei o caminho para fazer isso:

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

Mas o problema é que não vejo o nome do grupo. Tudo que consigo é um monte de usuários. Seria bom se alguém pudesse me dizer como exibir o nome do grupo antes que todos os membros desse grupo sejam listados. Obrigado.

    
por Alec T 22.08.2013 / 15:49

5 respostas

24

Gimme the codes! powers, ativar!

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

O ponto é, basta levar o seu tempo e dividi-lo em etapas. Eu sei que é divertido tentar obter tudo e a pia da cozinha para se encaixar em uma linha com o Powershell, mas isso não é necessário.

Algumas notas:

  • Você não precisa fazer Get-ADGroupMember se coletar a propriedade Members no Get-ADGroup Cmdlet inicial. A coisa boa sobre isso é que a metade da quantidade de chamadas que você precisa fazer para o AD é reduzida, o que deve fazer com que o script seja executado mais rapidamente, o que facilita o trabalho do controlador de domínio.

  • $ G.Members exibirá todos os membros do grupo $ G ... em Powershell 3. Em Powershell 2, você ainda pode precisar colocar outro Foreach dentro do Foreach lá para enumerar através dos membros do grupo. ( Yo dawg, eu ouvi você gostar de loops ... )

  • Eu uso Write-Host aqui, o que é bruto. Você nunca deve usar Write-Host . Em vez disso, você deve criar e produzir objetos, não texto, mas esse era um tópico totalmente diferente e eu estava com preguiça de fazer isso por essa resposta.

por 22.08.2013 / 16:12
8

Aqui está uma solução muito melhor. Isso colocará tudo em um csv de 3 colunas com nome de grupo, nome de usuário e nome de conta sam. É muito mais fácil descobrir em que grupo alguém está quando há 400 usuários em um grupo, já que você não precisa rolar.

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
    
por 06.01.2015 / 00:40
1

Eu tive que adicionar .name após $group para fazer isso funcionar para mim.

$Arrayofmembers = Get-ADGroupMember -identity $Group.name -recursive | select name,samaccountname
    
por 19.07.2016 / 16:52
0

Se você já tiver encontrado o problema Size Limit com grupos que contêm mais de 5000 membros, altere a linha como segue:

$Arrayofmembers = (Get-ADGroup $Group -Properties member).member | Get-ADUser -Properties *
    
por 28.06.2016 / 19:50
0

Aqui está um script que exporta todos os grupos em uma unidade organizacional para um arquivo separado para cada grupo com o nome e a descrição do grupo. Se alguém quiser isso ...

$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
  }
}   
}
    
por 17.01.2017 / 08:17