Gerar relatórios com Get-AdGroupMember no PowerShell

A popular use of PowerShell is working with Active Directory Directory Services (AD). There are so many time-saving things PowerShell can do with AD objects. Using the PowerShell Get-ADGroupMember cmdlet and other cmdlets can save you a ton of time.

Grupos do Active Directory são uma ótima maneira de segmentar contas de usuários. Grupos permitem que os administradores definam o acesso a recursos em muitos sistemas.

Neste artigo, vamos usar o PowerShell para obter membros do grupo AD e exportar esses membros. Você pode usar essas informações para gerar diversos relatórios interessantes.

Active Directory group

Gerencie e Relate no Active Directory, Exchange e Microsoft 365 com o ManageEngine ADManager Plus. Baixe a versão de avaliação gratuita!

Pré-requisitos

Se você deseja acompanhar este artigo, certifique-se de ter os seguintes requisitos prontos:

  • Trabalhando em um computador com Windows 10, associado ao domínio
  • Logado com um usuário que pode ler grupos AD e contas de usuários
  • Tenha o módulo PowerShell do Active Directory instalado

Aprendendo o Básico

Para consultar grupos e membros de grupos AD, você tem dois cmdlets do PowerShell à sua disposição – Get-AdGroup e Get-AdGroupMember.

O comando Get-ADGroup consulta um controlador de domínio e retorna objetos de grupo AD. Get-AdGroupMember olha dentro de cada grupo e retorna todas as contas de usuário, grupos, contatos e outros objetos que existem nesse grupo.

Obtendo Grupos AD

Para encontrar grupos AD com o PowerShell, você pode usar o cmdlet Get-ADGroup. Sem parâmetros, Get-ADGroup irá consultar o AD e retornar todos os grupos em um domínio usando o parâmetro Filter. O parâmetro Filter é obrigatório. Ele existe para limitar os grupos retornados com base em vários critérios.

Por exemplo, para encontrar todos os grupos sem considerar nenhum critério, use Get-ADGroup e especifique um caractere curinga (asterisco) para o parâmetro Filter. Você pode ver um exemplo abaixo. Percorrer todos esses grupos pode levar um tempo se você tiver centenas ou até milhares em seu domínio.

Get-ADGroup -Filter *

Se você precisa encontrar um único grupo, pode usar o parâmetro Identity.

O parâmetro Identity é um parâmetro comum entre todos os cmdlets do PowerShell do Active Directory. Ele permite limitar sua consulta a um único objeto AD. Por exemplo, se você precisasse verificar se um grupo chamado HR existe, você poderia descobrir executando o comando abaixo.

Get-ADGroup -Identity 'HR'

Obtendo Membros do Grupo AD com Get-AdGroupMember

Usar o PowerShell para listar membros de um grupo do AD requer o cmdlet Get-ADGroupMember. Este cmdlet obtém usuários, grupos e objetos de computador em um grupo específico. Talvez você precise encontrar todos os membros do grupo Administradores. Em sua forma mais simples, você simplesmente usaria o parâmetro Identity novamente especificando o nome do grupo como abaixo.

Get-ADGroupMember -Identity 'Administrators'

Observe que Get-AdGroupMember retorna apenas a associação de grupo para usuários, grupos e computadores. Ele não retornará outros objetos do AD como contatos.

Enumerando Membros do Grupo Dentro de Outros Membros do Grupo

Como você pode saber, os grupos do AD não apenas podem conter contas de usuário, mas também outros grupos, também chamados de aninhamento. Quando um grupo está aninhado dentro de outro grupo, os membros daquele grupo herdam as mesmas permissões atribuídas ao grupo pai.

Por padrão, o cmdlet Get-AdGroupMember do PowerShell não retorna membros de grupos aninhados. Para remediar isso, você pode usar o parâmetro Recursive. Por exemplo, você poderia encontrar membros de grupos aninhados dentro do grupo HR usando o parâmetro Recursive conforme mostrado abaixo.

Get-ADGroupMember -Identity 'HR' -Recursive

Obtendo Múltiplos Grupos/Membros de uma Só Vez

Se você precisar consultar o AD para muitos grupos diferentes ou membros de grupos de uma vez, também pode fazer isso usando um loop foreach do PowerShell. Um loop foreach executa um comando ou código para cada item em uma coleção. Neste caso, essa coleção será uma lista de nomes de grupos.

Talvez você precise encontrar todos os membros dos grupos HR, Contabilidade, e TI. Para fazer isso, primeiro você criaria uma coleção ou array com esses nomes de grupo. O exemplo abaixo define essa coleção como $groupNames. Em seguida, para cada nome nessa coleção, execute Get-ADGroupMember fornecendo o nome de cada grupo ao parâmetro Identity.

$groupNames = 'HR','Accounting','IT'
foreach ($group in $groupNames) {
    Get-ADGroupMember -Identity $group
}

Você também poderia usar o ForEach-Object cmdlet para iterar sobre os grupos.

Usando Credenciais Alternativas

Assim como muitos outros cmdlets do PowerShell, os cmdlets de grupo AD têm um parâmetro Credential. Por padrão, sempre que você executa um cmdlet de grupo AD, ele usa suas credenciais logadas para consultar o Active Directory. Esse comportamento exige que você esteja em um computador associado ao domínio conectado como um usuário do Active Directory com permissões.

Mas e se você estiver em um computador de grupo de trabalho ou precisar autenticar-se no AD como um usuário diferente? Nesse caso, você pode usar o parâmetro Credential. Este parâmetro permite que você especifique um nome de usuário e uma senha para usar na autenticação.

Por exemplo, talvez sua conta de usuário não tenha permissão para realizar uma tarefa do AD. Você tem uma conta de serviço com direitos adicionais. Você pode estar logado como um usuário padrão e ainda assim autenticar-se com a conta de serviço, conforme mostrado abaixo.

O cmdlet Get-Credential solicita um nome de usuário/senha para criar uma credencial. Essa credencial é então passada para o cmdlet Get-AdGroup para autenticação.

Get-ADGroup -Identity 'HR' -Credential (Get-Credential)

O parâmetro Credential é onipresente no PowerShell para fornecer credenciais de autenticação. Para mais informações, leia Usando o cmdlet Get-Credential do PowerShell e todas as coisas relacionadas a credenciais.

Obtendo membros de grupo com o Get-ADGroup?

Pode parecer contraditório, mas você também pode obter membros de grupo com o cmdlet Get-ADGroup.

Acontece que o Get-ADGroup retorna uma propriedade para cada grupo chamada members. Esta é uma coleção de objetos AD que são membros de um grupo.

Por exemplo, para encontrar os membros do grupo HR novamente sem usar o Get-ADGroupMember, você poderia fazer algo assim:

Get-ADGroup -Identity 'HR' -Properties members

Por que usar este método em vez de outro? A principal diferença é que as propriedades members contêm todos os tipos de objetos AD – não apenas usuários, computadores e outros grupos.

Talvez você tenha contatos dentro de vários grupos. Quando você executa Get-ADGroupMember, esses contatos não apareceriam. Mas se você disser ao Get-ADGroup para retornar todos os membros desse grupo e expandir essa coleção como mostrado abaixo, você verá os contatos.

Get-ADGroup -Identity 'HR' -Properties members | Select-Object -ExpandProperty members

Encontrando Atributos AD Específicos

Na seção básica acima, você estava simplesmente retornando todos os grupos e membros do grupo. As informações retornadas para cada grupo e membro do grupo são apenas um subconjunto dos atributos AD associados a cada tipo de objeto.

Talvez você queira ver o endereço de e-mail de uma conta de usuário, a data do último logon ou outro atributo AD associado? Para fazer isso, você precisará ser criativo.

Talvez você tenha conseguido encontrar todos os membros do grupo HR mas precise também ver o endereço de e-mail de cada conta de usuário?

$groupMembers = (Get-ADGroup -Identity 'HR' -Properties members).members
$groupMembers | Select-Object -Property Name, @{Name='Member';exp={Get-AdUser -Identity $_.Name -Properties emailAddress,lastlogonDate}}

Filtrando Resultados

Até este ponto, você encontrou todos os grupos e membros do grupo, mas em um ambiente de trabalho diário, raramente você precisa fazer isso. É provável que você precise apenas encontrar um número limitado de cada item. Os cmdlets de grupo AD têm algumas maneiras de lidar com isso.

O Parâmetro Filtro

Como mencionado anteriormente, ambos os cmdlets têm o parâmetro Filtro. Este parâmetro permite que você limite o que é retornado de muitas maneiras diferentes, fora do escopo deste artigo.

Usando o parâmetro Filter, você pode limitar os resultados por qualquer atributo do AD, como nome, tipo de grupo, endereço de e-mail, último logon para usuários, entre outros.

Por exemplo, talvez você queira encontrar apenas grupos de segurança. Nesse caso, você especificaria um atributo GroupCategory e definiria uma condição para garantir que apenas os grupos de Segurança sejam retornados.

Get-ADGroup -Filter 'GroupCategory -eq "Security"'

Talvez você queira encontrar todos os grupos de segurança, mas eles não devem ser grupos locais de domínio. Você então adicionaria outra condição (desta vez usando o operador -ne) para evitar que quaisquer grupos locais de domínio sejam retornados.

Get-ADGroup -Filter 'GroupCategory -eq "Security" -and GroupScope -ne "DomainLocal"'

Se você gostaria de aprender como criar filtros de consulta, certifique-se de verificar Aprendendo Filtros de Active Directory e LDAP no PowerShell.

Limitando os Resultados de Grupo por Unidade Organizacional (OU)

Talvez você tenha vários grupos aninhados em UOs. Você não necessariamente quer encontrar todos os grupos, mas apenas os grupos em uma OU específica. Nesse caso, você pode usar o parâmetro SearchBase.

O parâmetro SearchBase permite que você especifique o nome distinto (DN) de uma OU para começar a procurar grupos. Por exemplo, talvez você tenha uma OU chamada Localizações na raiz do seu domínio. Na OU Localizações, você tem cada OU de local criada como Austin, NYC, e Los Angeles. Você está apenas procurando por grupos na OU NYC e precisa restringir a visualização dos outros.

Uma estrutura de OU do AD de exemplo é mostrada abaixo. Observe que outros grupos existem fora das UOs de Localizações.

company.local
- Locations
  - Austin
  - NYC
    - Group 1
    - Group 2
  - Los Angeles
- Computers
  - Group 3
  - Group 4
- Service Accounts

Talvez você precise encontrar todos os grupos AD que estão apenas na OU NYC. Para limitar a consulta, você usaria o parâmetro SearchBase fornecendo o DN conforme mostrado abaixo. Todos os grupos dentro da OU Locations são retornados.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,OU=NYC,DC=company,DC=pri'

Mas agora você precisa encontrar todos os grupos em todas as OUs sob a OU Locations. Get-ADGroup retorna apenas grupos na OU Locations em si – não nas OUs filhas.

Para retornar grupos dentro de OUs filhas, você precisaria usar o parâmetro SearchScope. Este parâmetro é semelhante ao parâmetro Recursive no sentido de que ele inspecionará objetos filhos também.

Por exemplo, para encontrar todos os grupos em qualquer OU sob a OU Locations, especifique Subtree ou 2. Este valor para SearchScope diz ao Get-ADGroup para olhar recursivamente para todos os filhos, netos e assim por diante das OUs.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2

Para uma análise completa das opções do parâmetro SearchScope, consulte a documentação do Get-ADGroup.

Exportando Grupos e Membros AD

Agora você finalmente sabe como consultar e retornar os grupos e membros do grupo que você precisa. Todas essas informações são enviadas para o console do PowerShell. Mas agora você precisa colocar essas informações em um arquivo CSV ou planilha do Excel.

A única coisa que você precisa fazer agora é enviar todas essas informações para um arquivo.

Exportando para um CSV

Um formato popular para exportar informações AD é um CSV. O PowerShell tem um cmdlet útil que permite criar facilmente arquivos CSV a partir da saída do PowerShell chamado Export-Csv.

Você pode criar um arquivo CSV a partir de qualquer comando abordado neste artigo ao redirecioná-lo para Export-Csv. Usando o exemplo abaixo, você redirecionará todo o resultado que Get-AdGroup retornaria para o console para um arquivo CSV.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Csv -Path 'departmental_groups.csv' -NoTypeInformation

Para mais informações sobre este útil cmdlet, confira Export-Csv: A Maneira PowerShell de Tratar Arquivos CSV como Cidadãos de Primeira Classe.

Você também pode exportar facilmente os resultados para CSV via cmdlet Get-AdGroupMember.

Exportando para o Excel

O PowerShell não tem uma maneira nativa de exportar informações para o Excel. Mas você sempre pode baixar o módulo da comunidade chamado ImportExcel gratuitamente. Este módulo traz capacidades de exportação semelhantes a CSV diretamente para planilhas do Excel. Para instalar o módulo PowerShell, execute Install-Module ImportExcel -Scope CurrentUser.

Usando o exemplo acima, ao invés de um arquivo CSV, se você precisasse exportar os grupos para uma planilha do Excel, você usaria o cmdlet Export-Excel como mostrado abaixo.

Encontre senhas vazadas e inseguras no seu Active Directory verificando a lista de senhas do NCSC.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Excel -Path 'departmental_groups.csv'

O módulo ImportExcel possui uma tonelada de funcionalidades para trabalhar com o Excel. Se você precisa de uma planilha mais sofisticada, provavelmente ele tem uma função para você.

Para obter mais informações sobre o uso do módulo ImportExcel, leia este artigo. Ele fornece uma ótima introdução a alguns casos de uso comuns que ele pode lidar.

Gerencie e relate o Active Directory, Exchange e o Microsoft 365 com o ManageEngine ADManager Plus. Baixe a avaliação gratuita!

Conclusão

Usando apenas dois cmdlets do PowerShell, você pode fazer praticamente qualquer coisa com grupos do AD. Este artigo foi apenas uma introdução à funcionalidade disponível para você. Use o conhecimento adquirido aqui, siga alguns dos links para mergulhos mais profundos nos tópicos do artigo e veja o que você pode construir!

Source:
https://adamtheautomator.com/get-adgroupmember/