Com este script é possível extrair todas as propriedades de um usuário do Active Directory além de receber um relatório por via e-mail.
Certamente com este relatório a administração e os controles sobre os usuários do Active Directory ficaram mais eficientes evitando que você tenha surpresas durante uma Auditoria de TI.
Download: www.100security.com.br/tools/ad-lista.zip
Projeto: github.com/100security/ad-lista
Realize suas melhorias e compartilhe com todos.
Conheça também a ferramenta: ADRT – Active Directory Report Tool
Artigo: www.100security.com.br/adrt
01 Passo
Após o download do ad-lista.ps1 crie o diretório AD para executar o script.
PS C:\AD> dir
02 Passo
Edite o script ad-lista.ps1 e altere as linhas 91, 92, 94 e 95 informando suas configurações de E-mail
Observação:
Mesmo que os serviço de e-mail não esteja configurado os arquivos HTML e CSV serão gerados no diretório do script.
Caso não queira utilizar o serviço de e-mail comente as linhas com o carácter #
03 Passo
Execute o script ad-lista.ps1
PS C:\AD> .\ad-lista.ps1
04 Passo
No diretório AD serão gerados o arquivos:
- ad-lista.csv
- ad-lista.html
05 Passo
Ao abrir o arquivo ad-lista.html é exibido a relação de todos os usuários cadastrados no Active Directory.
As colunas que estão sendo exibidas podem ser customizadas de acordo com suas necessidades neste exemplo utilize:
Company = Empresa
SamAccountName = Conta do Usuário
Name = Nome do Usuário
Mail = E-mail do Usuário
Departamento = Departamento do Usuário
Title = Cargo/Função do Usuário
PasswordNeverExpires = Se a Senha do Usuário Expira ou Não (Tue = Sim | False = Não)
Enabled = Se a Conta do Usuário esta (True = Habilitada | False = Desabilitada)
Created = Data de Criação da Conta
Através do comando abaixo você consegue listar mais de 100 atributos para serem utilizados.
Basta escolher os atributos que desejar e alterar nas linhas 30 e 34 do script ad-lista.ps1
PS C:\AD> Get-ADUser usuario -Properties * | more
06 Passo
Com o arquivo ad-lista.csv basta abrir no Excel.
Excel
Assim você pode criar seus filtros, gerar indicadores dentro outros.
07 Passo
Relatório enviado por E-mail.
Com este recurso você pode realizar diversos controles como criar uma tarefa Diária, Semanal ou Mensal para ter um relatório periódico sobre os Usuários do Active Directory.
Vídeo (Passo a Passo)
Bom dia Marcos,
Muito bom seu tutorial mas tive um pequeno problema nos primeiros passos referente a ativação de script no powershell
cannot be loaded because the execution of scripts is disabled on this system.
pode me ajudar?
vlw
Rodrigo, é bem simples basta digitar o comando:
PS C:\AD> Set-ExecutionPolicy Unrestricted
Hi Marcos, i appreciate it..Please, is there any for Mac OS? can you email it to me Thnks alot
Steve, I do not know, I’ll search. Tks
Boa tarde, Marcos Henrique
Tem como implementar neste script para coletar todos os usuários de uma determinada OU? e não da floresta toda…??
Marcus Silva, segue abaixo algumas opções para melhorar ainda mais seu script.
import-module ActiveDirectory
# Lista todos os Usuários que estão no grupo “Domain Users”
Get-ADGroupMember -Identity “Domain Users”
# Lista todos os Usuários que estão na OU “Tecnologia” e exibe o Nome Completo e o Usuário de Rede
Get-ADUser -SearchBase “OU=Tecnologia,dc=100security,dc=local” -Filter * | Select Name,SamAccountName
Eu nao estou conseguindo adicionar essas linhas no script, não estou sabendo onde alterar.
Marco boa tarde
Ao executar o comando apareceu o seguinte erro:
Get-ADUser user (ou usuario) -Properties
The term ‘Get-ADUser´is not recognized as the name of a cmdlet, funciontion, script file, or operable program…..
Executei no driver C do servidor
Poderia me ajudar?
Claudio, antes de executar o comando Get-AdUser você deve importar o módulo do ActiveDIrectory.
C:\>import-module ActiveDirectory
C:\>Get-AdUser
Marcos, muito bom o script. Ajudou muito
Tem algum que pode listar grupo e os usuários dentro do grupo ?
Abraço
Buenos Dias Marcos:
De que manera puedo listar los permisos efectivos de los usuarios a Carpetas Compartidas en mi servidor
Nelson, você pode utilizar a ferramenta DumpSec (https://www.100security.com.br/dumpsec-auditoria-de-seguranca/) mas via PowerShell também é possível fazer isso.
Consigo identificar, via script, os usuários que já mudaram de “TIPO FUNCIONAL”, que nós já alteramos a descrição ou cargo, mas ainda não movemos de OU?
Leonardo, Via script é possível fazer isso sim, mas se quiser algo mais rápido e sua demanda for considerável você pode utilizar o AdMangerPlus (https://www.manageengine.com/products/ad-manager/) já tem isso pronto.
Boa tarde Marcos! Na realidade a demanda é pequena…tem como você me auxiliar a elaborar um script powershell por favor? Pelo menos o caminho das pedras. Abraço
Leonardo,
Posso lhe auxiliar sim o que precisa?
Marcos,
Utilizei a linha abaixo…
Get-ADUser -filter * -Properties * | select DisplayName, sAMAccountName, Description, DistinguishedName | export-Csv C:\temp
\teste02.csv -NotypeInformation -Delimiter “;”
ficou bom mas acho que tem como melhorar.
Leonardo,
É possível fazer muita coisa em PowerShell e na verdade de diversas formas, certamente você vai sempre encontrar uma forma diferente de fazer mesma coisa, minha sugestão é que mantenha o foco no resultado, ou seja qual é o objetivo que você deseja alcançar como script e tente chegar nesse resultado.
Meu objetivo é identificar, via script, os usuários que já foram desabilitados mas ainda não foram movidos pra OU Disabled.
Consigo extrair a relação dos usuários desabilitados, porém não estou conseguindo extrair os logins desabilitados que ainda não foram movidos para a OU Disabled.
Get-ADUser -Filter * | where {$_.Enabled -eq $False} | Select-Object Name,SamAccountName,DistinguishedName | Export-Csv C:\TEMP\disabilitados.csv -delimiter “;”
Olá Marcos,
Tenho uma dúvida. Preciso gerar um relatório com todos os usuários de uma filial e com seus respectivos dados. Quando uso o comando “Get-ADUser -SearchBase “CN=XX,OU=XX,OU=XX,OU=XX,OU=XX,DC=XX,DC=XX” -filter * | Select Name, DisplayName, Title, Department” ele só mostra algumas propriedades. Outras ficam em branco, como se ele nao conseguisse recuperar. No entanto, se eu executar o comando “Get-ADUser user -Properties *” ele mostra tudo. Você sabe o que pode ser?
Natanael,
Sinceramente eu não sei, teria que simular seu caso para entender o que ocorre, de qualquer forma caso tenha urgência na extração destas informações sugiro que utilize a solução ADManager Plus (https://www.manageengine.com/products/ad-manager/?MEtab) .
Bom dia Marcos!
eu consigo extrair as senhas dos usuarios?
desde já muito obrigado
Fernando,
Este é um procedimento de relatório, não é possível extrair a senha ate porque ela é criptografada.
Alerta! Há outras formas de se obter a senha de um usuário do AD porém certifique-se que você não esteja infringindo a lei 12.723 e principalmente as política de segurança da sua empresa.
Bom Dia Marcos, tudo bem ?
Veja se pode me ajudar por gentileza, na empresa que trabalho temos o TS com X usuários conectados e gerenciados pelo AD com grupos TS01, preciso exportar um relatório que me mostre todos estes usuários que possuem o grupo TS e a ultima data de modificação que o mesmo acessou , pois preciso mensalmente verificar quais usuários que estão com acesso e porem não estão utilizando o acesso removo frequentemente . Há alguma forma de eu pegar este relatório no AD ?
Danilo,
Tem um artigo que publique onde mostro como extrair um relatório de conexões RDP, acesse: https://www.100security.com.br/windows-usuarios/.
Sobre exibir os usuários que estão no grupo TS01 basta digitar algum dos comandos:
[PowerShell] Get-ADGroupMember -Identity TS01| ft name,SamAccountName -AutoSize
[CMD] dsquery group -name TS01 | dsget group -members -expand
[CMD] dsget group “CN=TS01,CN=Users,DC=dominio,DC=local” -members
[CMD] net group “TS01” /domain
Vê se isso já te ajuda, qualquer dúvida posta aqui!
Como posso adicionar nessa lista o grupo que o usuário pertence?
Danilo,
Vou compartilhar em um artigo alguns scripts que eu montei, certamente você vai encontrar algo se seja útil no seu dia a dia.
Bom dia Marcos,
Muito bom esse teu artigo.
Só tenho uma dúvida, você traz a data que a conta foi criada, consegue trazer também o usuário que criou a nova conta?
Vlw
Diogo,
O usuário que criou a conta é registrado no evento ‘Security’ através do ID 4720 (https://technet.microsoft.com/en-us/library/dd772693(v=ws.10).aspx) ele não é exibido das propriedades do usuário.
Boas
O script funcionou mas qd altero o ultimo parametro para MemberOf não me dá os grupos do user.
EX: $usuarios = @(Get-ADUser -filter * -Properties SamAccountName, Name, Department, Enabled, LastLogonDate, MemberOf)
Resultado: todos os campos dá a info mas os grupos não dá .. Pode ajudar ?
Rodrigo,
Deixe a linha da variável $usuarios como esta:
$usuarios = @(Get-ADUser -filter * -Properties SamAccountName, Name, Department, Enabled, LastLogonDate, MemberOf)
Na linha da variável $resultado substitua o MemerOf pela string assim como esta no exemplo abaixo:
$resultado = @($usuarios | Select-Object SamAccountName, Name, Department, Enabled, LastLogonDate, @{n=’MemberOf’; e= { $_.memberof | Out-String}})
Boa noite Marcos,
Quando executo o .\caminho, me da a seguinte msg de erro. Poderia da uma luz? Obrigado
Get-ADUser : Não é possível localizar um servidor padrão com os Serviços Web do Active Directory em execução.
Em C:\ad\ad-lista.ps1:18 caractere:21
+ $total = (Get-ADUser <<<< -filter *).count # Total de Usuários no Active Directory
+ CategoryInfo : ResourceUnavailable: (:) [Get-ADUser], ADServerDownException
+ FullyQualifiedErrorId : Não é possível localizar um servidor padrão com os Serviços Web do Active Directory em e
xecução.,Microsoft.ActiveDirectory.Management.Commands.GetADUser
Paulo,
Este script pode ser executado através do seu computador que esta no domínio e não deveria apresentar o erro, mas se você tiver acesso sugiro que execute-o no Domain Controller. Qualquer dúvida me avise. abraços..
Bom dia
Muito bom. Obrigado
Helder,
Obrigado pelo apoio!
Boa tarde,
Primeiramente parabéns por compartilhar seu conhecimento conosco, este Script meu ajudou muito. Tenho um dúvida, estou com dificuldades para adicionar neste script um campo a mais, preciso extrair dos usuários quais grupos do AD ele faz parte separados por OU, mas não estou conseguindo. Teria uma dica para me ajudar nisto?
Desde já agradeço.
Fábio,
Obrigado pelo apoio! talvez isso possa te ajudar:
Deixe a linha da variável $usuarios como esta:
$usuarios = @(Get-ADUser -filter * -Properties SamAccountName, Name, Department, Enabled, LastLogonDate, MemberOf)
Na linha da variável $resultado substitua o MemerOf pela string assim como esta no exemplo abaixo:
$resultado = @($usuarios | Select-Object SamAccountName, Name, Department, Enabled, LastLogonDate, @{n=’MemberOf’; e= { $_.memberof | Out-String}})
Em último caso se esta informação não for o suficiente você pode utilizar a ferramenta: AD Manager Plus (https://www.manageengine.com/products/ad-manager/) que extrai todas os detalhes do AD que você precisa.
Muito bom o script porem queria saber como pesquisar um OU dentro de outra OU pois ele da o erro de objeto não encontrado
ja FIZ OU=XXX,OU=XXX e não tem jeito, direto na raiz do dominio tipo Builtin funciona mas dentro de outra não vai.
Diego Pinheiro,
Me envie alguns prints do erro que esta aparecendo para você para o meu e-mail: [email protected], vou ver como posso ajudá-lo.
Hola marcos, si deseo que en este mismo reporte me traiga la última fecha de Logueo del usuario o el lastlogon solo lo debo de adicionar en la parte de propiedades? Y como puedo hacer esta consulta en 10 controladores de dominio al mismo tiempo.. Saludos desde Colombia
Cristian,
Si desea más detalles de todos los DCs conozca el ADRT: https://www.100security.com.br/adrt/
Si desea obtener más información de LastLogon: https://www.100security.com.br/windows-usuarios/
Bom dia Marcos,
Esta dando erro ao enviar e-mail, poderia esclarecer essa parte?
segue o erro apresentado:
Send-MailMessage : Sequência de comandos incorreta. A resposta do servidor
foi: 5.0.3 : Client host rejected: Para envio de
mensagens e necessaria autenticacao. Para saber como corrigir este erro
acesse: http://wiki.locaweb.com/pt-br/Email_Locaweb_-_Envio_Autenticado /This
mail server requires authentication
No C:\AD\ad-lista.ps1:92 caractere:1
+ Send-MailMessage -From $de -To $para -Subject $assunto -Attachments
$arquivo,ad- …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
+ CategoryInfo : InvalidOperation: (System.Net.Mail.SmtpClient:Sm
tpClient) [Send-MailMessage], SmtpException
+ FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.Send
MailMessage
Yago,
Em alguns provedores você deve permitir o envio dos e-mails através de ferramentas ou soluções de “terceiros” mas o envio autenticado pode ser solucionado através do parâmetro -Credential veja mais detalhes em: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage?view=powershell-5.1
Aproveite também para conhecer o ADRT acesse: https://www.100security.com.br/adrt/
Marcos,
Bom dia!
Primeiro quero agradecer pelo seu trabalho, me ajudou e muito.
Gostaria de saber se é possível trazer os usuários por uma unidade organizacional especifica, e caso não seja possível deste modo, teria como trazer por “membro de” especifico.
Muito Obrigado.
Junior Cardoso,
Obrigado pelo apoio, dá uma olhada nesse post: https://www.100security.com.br/adrt/
Olá Marcos! Cara, muito boa sua ajuda. Me ajudou bastante aqui, porém, eu quero adicionar mais um atributo P.O.Box do postOfficeBox, onde fica a matricula dos usuários, ao executar o script, apresenta o resultado: Microsoft.ActiveDirectory.Management.ADPropertyValueCollection. Se puder me ajudar irmão, e muito obrigado pela ajuda.
Roberto,
Por ser tratar de um campo que pode receber uma grande string de valores você tem que inserir alguns parâmetros e isso acontece tanto par ao PostOfficeBox como par ao MemberOf, segue as a linhas aqui, basta editar seu script ou fazer o download aqui novamente pois eu já atualizei para todos também..
$usuarios = @(Get-ADUser -filter * -Properties Company, SamAccountName, Name, Mail, Department, Title, PasswordNeverExpires, Enabled, Created, MemberOf, PostOfficeBox)
$resultado = @($usuarios | Select-Object Company, SamAccountName, Name, Mail, Department, Title, PasswordNeverExpires, Enabled, Created, @{n=”MemberOf”;e={[string]$_.MemberOf}}, @{n=”PostOfficeBox”;e={[string]$_.PostOfficeBox}})
Obrigado pelo apoio!
Bom Dia !
Executei o script funcionou de boa. Gostaria de saber se vc tem um script para saber dos usuários desativados do AD.
Elton,
Eu desenvolvi uma ferramenta bem completa o ADRT que já inclui esta opção, acesse: https://www.100security.com.br/adrt/
Boa tarde Marcos,
Poderia informar se é possível efetuar estes mesmos procedimentos, porém para servidores?
Eu precisaria saber a descrição de cada servidor, caso tenha este procedimento, eu precisaria para o windows server enterprise 2007.
Elias,
É possível sim, eu desenvolvi uma ferramenta em PowerShell que vai facilitar a extração destas informações para você, acesse: https://www.100security.com.br/adrt
Boa tarde Marcos,
Muito obrigado pelas informações e quero parabenizar por estar compartilhando o seu conhecimento para melhorar o dia a dia de cada profissional desta área!
Tutorial muito bem explicado parabéns mesmo!
Elias,
Obrigado pelo apoio, meu objetivo é compartilhar mesmo!
Cara.. não faço ideia de como funciona um ad… tão pouco a configuração e manipulação do power shell.
executei seu script e ficou zerado os arquivos…
Eu não tenho permissão adm no AD … estou executando com meu usuário “comun’… pode ser isso ?
Marcelo,
Dependendo das permissões atribuídas ao AD você pode não conseguir realizar a coleta de tantos dados, mas não custa tentar.
Instale o pacote de Ferramentas de Administração de Servidor Remoto (https://www.microsoft.com/pt-BR/download/details.aspx?id=45520) e após a instalação acesse este artigo que eu publiquei sobre a ferramenta ADRT: https://www.100security.com.br/adrt isso pode te ajudar a obter as informações que você precisa.
Marcos, tudo bem ? Sou novo aqui no e estou aprendendo a mexer nos servidores agora.
Gostaria de saber se é possivel extrair um relatorio de todos os usuários que estão como administradores nos computadores que estão no dominio.
Poderia me auxiliar ?
Muito obrigado
Leandro,
Há diversas forma de fazer isso, você pode por exemplo fazer um script em bat e executar via GPO para realizar a coleta desta informação em cada um dos computadores, ou você pode realizar esta consulta através de uma ferramenta de inventário, caso você não esteja utilizando uma ferramenta eu te recomendo a testar o Open-Audit (https://www.open-audit.org/)
Bom dia mestre, realmente teu script é muito bom… Parabéns pela inciativa.
Bom, não muito diferente da galera aqui, cada um tem uma particularidade em extrair os dados, e comigo não é diferente.
Seria possível extrair as OUs que usuário fazem parte?
Exemplo, possuo uma OU Pai e dentro dela tem as filiais, cada filial tem uns 100 usuário… Mensalmente preciso fazer um relatorio de cada usuário em cada filial, e preciso rodar manual um script de cada OU…
Muto obrigado e parabéns mais uma vez.
Eduardo,
Primeiramente obrigado e conto com seu apoio para divulgar o site.
Sobre sua dúvida, essa extração é possível sim, basta digitar: C:\>dsquery user -name * e serão exibidos todos os usuários do Active Directory com suas respectivas OUs.
Espero ter ajudado!
Marcos, excelente script parabéns, contudo não sei se você passou por isso.
Eu rodei ele para verificar as contas ativas e desabilitadas, porém tem contas que não estão trazendo o resultados, fica em branco.
Att
Aldo,
Ainda não passei por isso, mas você esta executando o script com uma conta Domain Admin ou com uma conta com privilégios atribuídos via Delegate Control?
Vou realizar alguns testes para ver se consigo simular esse cenário que você descreveu.
Obrigado pelo apoio.
Marcos Henrique,
Fiz questão de me cadastrar aqui e agradecer pelo conteúdo.
Obrigado por disseminar conhecimento!!!
Ricardo,
Obrigado pelo apoio!
Marcos, parabéns pelo conteúdo, o script é muito bom e de fácil entendimento.
Tentei incluir o atributo profilePath que seria o script de logon, mas não deu certo, a lista vem em branco.
Sabe dizer se é possível isso?
Mais uma vez, parabéns.
Marcos, sobre a pergunta que fiz pode desconsiderar.
Eu estava utilizando o campo errado (profilePath), sendo que o correto é o scriptPath e dessa forma funcionou. Mesmo assim obrigado.
Vinicius,
Que bom que deu certo, grande abraço!
Marcos, boa tarde excelente seu script, já consegui adaptar, algumas informações que eu precisava, mas nao consegui configurar o envio de email automatico, sem eu ter que digitar as credenciais, tentei utiizar : Send-MailMessage -From $de -To $para -Subject $assunto -Attachments $arquivo,ad-lista.csv -bodyashtml -Body $mensagem -SmtpServer $smtp -Port $porta -UseSsl -Credential $Username $Password
mas sem sucesso.
Outra questão que já tentei gerar 1 arquivo atualizado com o nome ad-lista.html como o script já faz e um arquivo como se fosse um backup pra ficar de historico como ad-lista-data.html mas tambem nao consegui.
Poderia me ajudar ?
Marcos, deu certo o script aqui, muito show e obrigado pela ajuda.
Por fim, gostaria de tirar uma dúvida, eu quero extrair também nesta lista a data do último logon dos usuários, como faço isso?
Grato.
Helbert,
Que bom que deu certo!
Sobre sua dúvida eu não cheguei a motar esse cenário centralizado no AD, mas esse artigo (https://www.100security.com.br/windows-usuarios/) eu mostro como fazer isso por servidor, pode te ajudar de alguma forma!