Get-AdUser: Como Auditar Usuários do Active Directory com o PowerShell

O PowerShell é uma ferramenta essencial para os administradores de TI, e torna fácil auditar contas de usuário do Active Directory com o comando Get-AdUser. Neste guia, vamos detalhar como começar com o popular cdmdlet Active Directory.

Introdução ao cmdlet PowerShell Get-AdUser

O cmdlet Get-AdUser é um dos cmdlets PowerShell do Active Directory mais populares. Ele permite obter um objeto de usuário especificado, ou permite realizar pesquisas personalizáveis para obter vários objetos de usuário.

Publicidade

O parâmetro Identity é usado para especificar qual usuário do Active Directory obter. Você tem várias opções sobre como identificar o usuário:

  • Você pode usar o nome distinto (DN), GUID, identificador de segurança (SID) ou nome de conta do Security Account Manager (SAM).
  • Você também pode definir o parâmetro para uma variável de objeto de usuário como $UserA ou passar um objeto de usuário pelo pipeline para o parâmetro Identity.

Você pode usar os parâmetros Filtro ou LDAPFilter para pesquisar e obter mais de um usuário. O parâmetro Filtro usa a Linguagem de Expressão do PowerShell (PSL) para consultar o Active Directory.

A syntaxe da Linguagem de Expressão do PowerShell fornece suporte rico à conversão de tipos para os tipos de valor aceitos pelo parâmetro Filter. Se você já tiver strings de consulta do Protocolo de Acesso a Diretórios Leves (LDAP), use o parâmetro LDAPFilter em vez disso.

Se nenhum parâmetro for explicitamente definido, o comando Get-AdUser exibe um conjunto padrão de propriedades do objeto de usuário. Para recuperar propriedades adicionais, use o parâmetro Properties. Entraremos em detalhes sobre alguns dos parâmetros que você pode usar mais adiante neste artigo.

Publicidade

Como usar Get-AdUser e pré-requisitos

Antes de usar o comando Get-AdUser e outros comandos do PowerShell relacionados ao Active Directory, certifique-se de que o módulo do Active Directory esteja instalado e carregado em sua estação de trabalho. Com base na versão do Windows que você está usando, há métodos variados que você pode seguir para instalar o cmdlet.

Para ser sucinto, passarei pelos dois métodos mais comuns que provavelmente você seguirá como administrador ou profissional de TI gerenciando seu Active Directory local.

Primeiramente, você pode usar o seguinte comando do PowerShell para instalar a ferramenta Remote Server Administration Tools (RSAT) diretamente no Windows Update.

Add-WindowsCapability –online –Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"

O segundo método é usar o aplicativo Configurações para instalar a ferramenta RSAT diretamente. Clique em Iniciar -> Configurações -> Aplicativos -> Recursos Opcionais -> Adicionar um recurso -> e marque a opção RSAT: Ferramentas de Serviços de Domínio Active Directory e Serviços de Diretório Leve.

Publicidade

Clique no botão Instalar.

Como encontrar uma conta de usuário do AD usando o parâmetro -Identity

Certo, vamos começar a usar o cmdlet e mostrar como posso ajudá-lo a se tornar mais proficiente (e rápido!) para obter as informações necessárias. Estou trabalhando em meu ambiente de laboratório do Hyper-V (Active Directory do Windows Server 2022) e estou conectado a uma máquina virtual (VM) cliente do Windows 10 21H1. Procurei no Menu Iniciar por ‘Módulo de Diretório Ativo para Windows PowerShell’ e o abri via ‘Executar como administrador’.

Active Directory Module for Windows PowerShell

Primeiro, vamos encontrar um usuário de domínio com base no atributo sAMAccountName

Get-ADUser breinders
Finding a user account via their sAMAccountName

Aí está. Agora podemos usar o atributo objectGUID (ou GUID) para encontrar um usuário. Vamos tentar:

Get-ADUser bdcaaf45-e993-4be7-83d2-c1d280edc250
Finding an account via their objectGUID (GUID)

Ah, mesma conta de usuário. Excelente. Também podemos procurar um usuário com base no seu Identificador de Segurança, ou SID.

Get-ADUser S-1-5-21-3437955921-3370966048-1812589592-1107
Finding an account via their Security IDentifier (SID)

Sim, um pouco repetitivo, mas você entendeu o ponto. Você também pode usar o Sobrenome, Nome, NomePrincipalDoUsuário e outros do usuário.

Usando o filtro Get-AdUser

Em ambientes maiores, não recomendaria digitar apenas ‘Get-AdUser’ pois começará a recuperar TODOS os objetos de usuário no seu domínio AD anexado. Isso não apenas começará a inundar o console com dados, mas também poderá colocar uma pressão perceptível no controlador de domínio que sua estação de trabalho está usando.

Se ao menos pudéssemos filtrar toda a base de usuários e procurar usuários específicos com base em algumas propriedades. Bem, é exatamente para isso que o parâmetro ‘-filter’ serve!

O parâmetro ‘-filter’ especifica uma string de consulta que recupera objetos AD. Esta string usa a sintaxe da Linguagem de Expressão do PowerShell (PEL). A sintaxe do PEL fornece suporte à conversão de tipo rico para tipos de valor recebidos pelo parâmetro Filtro. A sintaxe usa uma representação em ordem, o que significa que o operador é colocado entre o operando e o valor. Vamos passar por alguns exemplos para lhe dar uma melhor ideia.

Primeiro, vamos descobrir todas as contas que estão ‘Ativadas’.

Get-ADUser -filter {Enabled -eq "true"} | ft
Locating all the enabled accounts

Estamos usando aquela adorável sintaxe PEL para encontrar todas as contas com o campo ‘Enabled’ igual a Verdadeiro. Estamos também direcionando a saída utilizando o cmdlet PowerShell Format-Table para um formato de exibição mais fácil de ler.

Em seguida, vamos exibir todos os usuários com um endereço de e-mail.

Get-ADUser -Filter {mail -ne "null"} -Properties Name,GivenName,mail| ft Name,GivenName,mail
Finding all the user accounts with an email address

Primeiramente, observe que estamos usando o parâmetro ‘-filtro’ para incluir apenas contas de usuário que não tenham um endereço de e-mail ‘null’. Ou, de forma mais simples, todas as contas com um endereço de e-mail. Eu sei, às vezes é difícil tentar pensar como um computador.

Em segundo lugar, estamos focando nas três propriedades Nome, NomePróprio e mail (endereço de e-mail). Usamos Format-Table e listamos essas propriedades. Moleza!

Você também pode querer auditar suas contas de um ponto de vista de segurança. Você também pode usar o parâmetro ‘-filtro’ para encontrar todas as contas com o atributo ‘passwordneverexpires’. Isso é geralmente não recomendado.

Get-AdUser where name like?

Outra característica legal é usar vários parâmetros com -filtro para encontrar apenas usuários específicos que correspondam às várias propriedades de um objeto de usuário do AD. Embora meu ambiente de laboratório seja extremamente pequeno e tenha apenas cerca de dez contas de usuário, ainda pode demonstrar o poder e a flexibilidade de poder encontrar rapidamente as contas que você procura. Aqui, vamos encontrar todos os usuários com ‘Reinders’ em seus nomes.

Get-ADUser -Filter {name -like "*Reinders*"} -Properties * | ft Name,EmailAddress

Estamos usando o parâmetro ‘Nome’ e encontrando todas as contas que têm ‘Reinders’ em qualquer parte do nome. Pode ser o nome deles, sobrenome e até um nome do meio, se estiver inserido. Se você QUISER encontrar usuários apenas com Reinders como sobrenome, altere o campo -like para ser “*Reinders”. (Observe que não há asterisco (*) no final do campo).

Limitando o escopo da pesquisa Get-AdUser por Unidade Organizacional

Se você possui um domínio/empresa relativamente grande, pode se deparar com tempos de consulta mais longos ao executar esses comandos, ou impactos de desempenho desnecessários em seus controladores de domínio. Vamos falar sobre limitar o escopo dessas pesquisas para uma Unidade Organizacional (OU) específica.

Podemos usar o parâmetro ‘-SearchBase’ e especificar uma OU (ou várias OUs) usando a seguinte sintaxe.

Get-ADUser -SearchBase 'OU="Test Users",DC=reinders,DC=local' -filter * -Properties Name,EmailAddress | ft Name,EmailAddress
Here, we’re limiting the search scope to the ‘Test Users’ Organization Unit (OU)

Aqui, estamos limitando nosso escopo a todos os usuários na OU “Test Users”, e então exibindo seus nomes e endereços de e-mail em formato de tabela.

Usando Get-AdUser com credenciais alternativas

Por padrão, o cmdlet Get-AdUser é executado no contexto do usuário atualmente conectado. Se desejar executar o comando com credenciais alternativas, você pode usar uma variável, armazenar as credenciais alternativas nessa variável e, em seguida, executar o comando usando a opção ‘-Credential’.

$cred = Get-Credential Get-ADUser -Credential $cred -Filter {name -like "*Reinders*"} -Properties * | ft Name,EmailAddress

Novamente, simples e direto.

Trabalhando com o parâmetro Propriedades do Get-AdUser

I’ve shown a few examples of the ‘-Properties’ parameter, but let’s take a step back and explain it a bit.

O parâmetro ‘-Properties’ especifica as propriedades do objeto de saída a serem recuperadas do servidor. Por padrão, se você não o utilizar, dez propriedades são retornadas e exibidas. Coisas como DistinguishedName, se a conta está ‘Ativada’ ou ‘Desativada’, o GivenName do usuário, Name, GUID e outras atributos mais semelhantes a sistemas. Mas há várias disponíveis. Use esse parâmetro para recuperar propriedades que não estão incluídas no conjunto padrão.

Especifique as propriedades para este parâmetro como uma lista separada por vírgulas de nomes. Para exibir todos os atributos que estão definidos no objeto, especifique * (asterisco).

Para acessar essas outras propriedades, basta especificá-las; use o nome da propriedade. Para propriedades que não são padrão ou propriedades estendidas, você deve especificar o nome de exibição do atributo do Protocolo de Acesso a Diretórios Leves (LDAP).

Vamos passar por alguns exemplos.

Get-ADUser -filter * -Properties Name,PasswordLastSet | ft Name,PasswordLastSet
Displaying all users with the date and time their password was last set/reset

O exemplo acima mostra todos os usuários no domínio com seus Nomes e a data/hora de quando sua senha foi definida/redefinida pela última vez.

Get-ADUser -filter * -Properties Name,whencreated | ft Name,WhenCreated
Another nice feature is listing every user’s Creation Date in Active Directory

Isso mostra quando a conta foi criada no Active Directory. Vamos concluir com uma consulta para trazer o Nome, Departamento e Gerente de cada conta.

Get-ADUser -filter * -Properties Name,Department,Manager | ft Name,Department,Manager
Listing the Department and the Manager of each user, if they’re populated in Active Directory

Um exemplo final e excelente uso do comando Export-Csv. Se precisar obter uma listagem de todos os usuários em um domínio e incluir todas as propriedades, vá em frente e execute este comando para exportar tudo para um arquivo CSV conveniente.

Get-ADUser -filter * -properties * | Export-CSV c:\temp\Users.csv

Resumo

I hope you gained some knowledge about how to use the Get-AdUser PowerShell command. This really scratches the surface, however, this is one aspect I like about the power of PowerShell: Learning about the core properties of a cmdlet and extrapolating it out to your organization.

Muitas vezes, é surpreendentemente fácil pensar em muitos casos de uso nos quais você pode utilizar este comando para resolver um problema, criar alguma documentação para outros engenheiros e auxiliar nos processos gerais de solução de problemas. Pode ser muito útil. E, claro, usar alguns desses comandos para gerar um script em PowerShell… sempre aumenta a eficiência!

Fique à vontade para deixar perguntas ou comentários abaixo.

Artigo Relacionado:

Source:
https://petri.com/get-aduser-how-to-audit-active-directory-users-with-powershell/