Adam, o automatizador

Um uso popular do PowerShell é trabalhar com os serviços de diretório do Active Directory (AD). Há tantas coisas que economizam tempo que o PowerShell pode fazer com objetos AD. Usar o PowerShell para obter membros do grupo AD e grupos economiza muito tempo.

Os grupos do Active Directory são uma ótima maneira de segmentar contas de usuário. Os grupos permitem que os administradores definam o acesso aos recursos em muitos sistemas.

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

Índice

Pré-requisitos

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

  • Trabalhar em um Windows 10, computador associado a um domínio
  • Conectado com um usuário que pode ler grupos do AD e contas de usuário
  • Ter o módulo PowerShell Active Directory instalado

Aprendendo o básico

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

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 naquele grupo.

Obtendo grupos AD

Para encontrar grupos AD com PowerShell, você pode usar o cmdlet Get-ADGroup. Sem parâmetros, Get-ADGroup 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 levar em conta qualquer critério, use Get-ADGroup e especifique um curinga ( asterisco) para o parâmetro Filter. Você pode ver um exemplo abaixo. Rolar por todos esses grupos pode demorar um pouco se você tiver centenas ou mesmo milhares em seu domínio.

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

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

Obtendo membros do grupo AD

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

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

Enumerando membros do grupo dentro dos membros do grupo

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

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

Obtendo vários grupos / membros de uma vez

Se você precisar consultar o AD para muitos grupos diferentes ou membros do grupo de uma vez, você 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. Nesse caso, essa coleção será uma lista de nomes de grupos.

Talvez você precise localizar todos os membros do grupo nos grupos de RH, Contabilidade e TI. Para fazer isso, primeiro você criaria uma coleção ou matriz desses nomes de grupo. O exemplo abaixo define esta coleção como $groupNames. Em seguida, para cada nome nessa coleção, execute Get-ADGroupMember fornecendo o nome de cada grupo para o parâmetro Identity.

Como alternativa, você pode usar o ForEach-Object cmdlet para repetir os grupos.

Usando credenciais alternativas

Como muitos outros cmdlets do PowerShell, os cmdlets do grupo AD têm um Credential parâmetro.Por padrão, sempre que você executa um cmdlet de grupo AD, ele usa suas credenciais de login para consultar o Active Directory. Esse comportamento determina que você precisa estar em um computador associado a um domínio conectado como um usuário do Active Directory que tenha permissão.

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

Por exemplo, talvez sua conta de usuário não tenha o direito de executar uma tarefa AD. Você tem uma conta de serviço com direitos adicionais. Você pode estar conectado como um usuário padrão, mas ainda assim autenticar com a conta de serviço, conforme mostrado abaixo.

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

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

Obtendo membros do grupo com Get-ADGroup?

Pode parecer contra-intuitivo, mas você também pode obter membros do grupo com o Get-ADGroup cmdlet.

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

Por exemplo, para encontrar membros do grupo nesse grupo de RH novamente sem usar Get-ADGroupMember, você pode faça algo assim:

Por que usar este método em vez do outro? A principal diferença é que as members propriedades 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 aparecem. Mas se você disser a Get-ADGroup para retornar todos os membros desse grupo junto com a expansão da coleção conforme mostrado abaixo, você verá os contatos.

Encontrando atributos específicos do AD

Na seção básica acima, você simplesmente estava 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, última data de logon ou outro atributo AD associado ? Para fazer isso, você precisa ser criativo.

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

Filtrando resultados

Até este ponto, você encontrou todos os grupos e membros do grupo, mas em um ambiente de trabalho diário, raramente é necessário fazer isso. Provavelmente, você só precisará encontrar um número limitado de cada item. Os cmdlets do grupo AD têm algumas maneiras de lidar com isso.

O parâmetro de filtro

Como mencionado anteriormente, ambos os cmdlets têm o Filter parâmetro. 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 AD atributo como nome, tipo de grupo, endereço de e-mail, último logon de usuários e assim por diante.

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 Security grupos sejam retornados.

Talvez você queira encontrar todos os grupos de segurança, mas eles não devem ser grupos de domínio local. Em seguida, você adicionaria outra condição (desta vez usando o operador -ne) para evitar que qualquer grupo local de domínio seja retornado.

Se quiser aprender como criar filtros de consulta, certifique-se de verificar Aprendendo Filtros Active Directory e LDAP no PowerShell. id = “f9c98c2944”>

Limitando resultados de grupos por unidade organizacional (UO)

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

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

Um exemplo de estrutura de UO AD é mostrado abaixo.Observe que outros grupos existem fora das UOs Locais.

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

Mas agora você precisa localizar todos os grupos em todas as UOs na UO Locations. Get-ADGroup retorna apenas grupos na própria UO Locations – não nas UOs filhas.

Para retornar grupos dentro de UOs filhas, você precisa usar o SearchScope. Este parâmetro é semelhante ao parâmetro Recursive, pois também inspeciona objetos filho.

Por exemplo, para localizar todos os grupos em qualquer UO na UO Locations, especifique Subtree ou 2. Este valor para SearchScope informa Get-ADGroup para olhar recursivamente para todos os filhos, netos e UOs inativas.

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

Exportando grupos e membros do AD

Então você finalmente sabe como consultar e retornar os grupos e membros do grupo de que 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 do 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 canalizando-o para Export-Csv. Usando o exemplo abaixo, redirecionará toda a saída que Get-AdGroup retornaria ao console para um arquivo CSV.

Para obter mais informações sobre este cmdlet útil, consulte Export-Csv: a maneira do PowerShell de tratar arquivos CSV como cidadãos de primeira classe.

Exportando para Excel

O PowerShell não tem uma maneira nativa de exportar informações para o Excel. Mas, você sempre pode baixar o módulo gratuito da comunidade chamado ImportExcel. Este módulo traz recursos 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, em vez de um arquivo CSV, você precisava exportar os grupos para uma planilha do Excel, usaria o cmdlet Export-Excel conforme mostrado abaixo.

O módulo ImportExcel tem muitas funcionalidades para funcionar com o Excel. Se precisar de uma planilha mais sofisticada, provavelmente ela tem uma função para você.

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

Conclusão

Usando apenas dois cmdlets do PowerShell, você pode fazer quase tudo com grupos AD. Este artigo foi apenas uma introdução à funcionalidade disponível para você. Use o conhecimento reunido aqui, siga alguns dos links para aprofundar o assunto no artigo e veja o que você pode construir!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *