What if I am asked to provide last time a particular attribute was modified in Active Directory ?
How to detect when and on which DC a particular AD object attribute was last modified ?
Well, as part of our job, as a SysAdmin, from time to time you may get requests from people that want to know when a particular modification was made to an AD object. For instance, the mail attribute was modified on an account and it caused an issue to the user. When you are doing a RCA (Root Cause Analysis), you may be asked to identify when the attribute change was made so you can know when the problem occurred.
So, this is something that you can achieve by executing a simple command : Repadmin. :)
Although you can't see when all changes were made, you can check date and time of the last change that was made to a particular attribute.
Here is what you need to do:
Prerequisites
If user
get-aduser "samaccountname" [ENTER]
Make note of the DN attribute. You will need that.
If computer
get-adcomputer "samaccountname" [ENTER]
Make note of the DN attribute. You will need that.
If group
get-adgroup "samaccountname" [ENTER]
Make note of the DN attribute. You will need that.
Finally, the last thing you will need is a domain controller that is available.
Now here is the syntax you need to use to retrieve all changes that have been made to a particular object in Active Directory
repadmin /showobjmeta "domain controller here" "Distinguished name here"
In plain English:
Please domain controller named "domain controller here", can you tell me all the last attribute changes that have been made to this object "Distinguished name here", when the last change was made and which domain controller this change was made from ?
e.g- If domain controller is called DC01 and the DN is CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com, the command would be : repadmin /showobjmeta DC01 "CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com"
Make sure the DN will always be between quotes.
1- Getting the DN of object I want to query against;
2- Finding out domain controllers (in case you are a consultant and do not know much about the environment). I am assuming your domain controllers are also DNS servers. NS stands for Name Server;
3- Repadmin syntax
A- AD Site and domain controller the change was made from
B- Date and time the change was made
C- Number of times this attribute was changed and attribute name
If we take a look at attribute "logonhours" above, we can see it was only modified once, on Oct 17th 2018, at 12:52:08.
I've gone ahead and changed that attribute in Active Directory. Now, if I execute this command again, check this out !!
The "Ver" column has incremented by one. Value is now "2". That means , this attribute was modified twice since it was created.
The other ones (Loc. USN, Org.USN) we will leave it for another day and they deserve their own post. This is basically used so the domain controller can know what attribute value is the latest and can update its database with the correct value. As Active Directory is a multi-master, changes may be made on any domain controller and it is possible same object will be modified, on different domain controllers, by 2 different admins.
Bonus
Some companies have been around for really long time and their domain may have so many changes that may be difficult to track all the changes. In that case, you can leverage "findstr" to filter the output you are looking for.
For instance, if you only want to know about modifications that have been made in the current year, you can do this :
repadmin /showobjmeta DC01 "CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com" | findstr "current year here"
e.g- I only want to know what has changed in 2019, then the syntax would be something like this :
repadmin /showobjmeta DC01 "CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com" | findstr "2019"
Well, as part of our job, as a SysAdmin, from time to time you may get requests from people that want to know when a particular modification was made to an AD object. For instance, the mail attribute was modified on an account and it caused an issue to the user. When you are doing a RCA (Root Cause Analysis), you may be asked to identify when the attribute change was made so you can know when the problem occurred.
So, this is something that you can achieve by executing a simple command : Repadmin. :)
Although you can't see when all changes were made, you can check date and time of the last change that was made to a particular attribute.
Here is what you need to do:
Prerequisites
- Powershell where Active Directory module is loaded;
- Repadmin command line(depending on the machine you are running this from , you may need to get RSAT installed so Repamin can be available);
- The AD object you want to query against;
If user
get-aduser "samaccountname" [ENTER]
Make note of the DN attribute. You will need that.
If computer
get-adcomputer "samaccountname" [ENTER]
Make note of the DN attribute. You will need that.
If group
get-adgroup "samaccountname" [ENTER]
Make note of the DN attribute. You will need that.
Finally, the last thing you will need is a domain controller that is available.
Now here is the syntax you need to use to retrieve all changes that have been made to a particular object in Active Directory
repadmin /showobjmeta "domain controller here" "Distinguished name here"
In plain English:
Please domain controller named "domain controller here", can you tell me all the last attribute changes that have been made to this object "Distinguished name here", when the last change was made and which domain controller this change was made from ?
e.g- If domain controller is called DC01 and the DN is CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com, the command would be : repadmin /showobjmeta DC01 "CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com"
Make sure the DN will always be between quotes.
1- Getting the DN of object I want to query against;
2- Finding out domain controllers (in case you are a consultant and do not know much about the environment). I am assuming your domain controllers are also DNS servers. NS stands for Name Server;
3- Repadmin syntax
A- AD Site and domain controller the change was made from
B- Date and time the change was made
C- Number of times this attribute was changed and attribute name
If we take a look at attribute "logonhours" above, we can see it was only modified once, on Oct 17th 2018, at 12:52:08.
I've gone ahead and changed that attribute in Active Directory. Now, if I execute this command again, check this out !!
The "Ver" column has incremented by one. Value is now "2". That means , this attribute was modified twice since it was created.
The other ones (Loc. USN, Org.USN) we will leave it for another day and they deserve their own post. This is basically used so the domain controller can know what attribute value is the latest and can update its database with the correct value. As Active Directory is a multi-master, changes may be made on any domain controller and it is possible same object will be modified, on different domain controllers, by 2 different admins.
Bonus
Some companies have been around for really long time and their domain may have so many changes that may be difficult to track all the changes. In that case, you can leverage "findstr" to filter the output you are looking for.
For instance, if you only want to know about modifications that have been made in the current year, you can do this :
repadmin /showobjmeta DC01 "CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com" | findstr "current year here"
e.g- I only want to know what has changed in 2019, then the syntax would be something like this :
repadmin /showobjmeta DC01 "CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com" | findstr "2019"
I hope this has been useful for you guys and I'd like to thank you for stopping by !!
=====================================================
Português
Como saber quando e em qual controlador de domínio um objeto do AD foi modificado pela última vez?
Parte do nosso trabalho como Administrator de Sistemas e fornecer, de vez em quando, informações que possam ajudar no troubleshooting de problemas que ocorreram na empresa.
Por exemplo:
Depois de um troubleshooting, foi descoberto que um problema aconteceu porque o atributo "mail" foi modificado em uma conta do AD. Então, você recebe a missão de identificar quando foi que este atributo foi modificado e em qual site ou controlador de domínio foi feita.
Você pode conseguir isso executando um comando chamado: repadmin :)
Você não poderá ver todas as modificações que foram feitas porque ele só guarda a última, mas você pode checar a data, hora e em qual controlador de domínio a última modificação foi feita.
Pre-requisitos
1. Powershell com o módulo Active Directory carregado;
2. Repadmin tool (dependendo da maquina que você vai executar, você pode ter que baixar o RSAT e instalar na maquina para ter disponível o comando Repadmin;
3. O objeto do AD que você quer investigar
Com isso em mãos, abra o powershell e digite:
Se for usuário
get-aduser "samaccountname" [ENTER]
Anote o "Distinguished Name" pois iremos usa-lo mais pra frente
Se for computador
get-adcomputer "samaccountname" [ENTER]
Anote o "Distinguished Name" pois iremos usa-lo mais pra frente
Se for grupo
get-adgroup "samaccountname" [ENTER]
Anote o "Distinguished Name" pois iremos usa-lo mais pra frente
Finalmente, você precisa saber o nome de um controlador do domínio.
Agora, a syntaxe que você ira usar:
repadmin /showobjmeta "controlador de domínio aqui" "Distinguished name aqui"
Em Português claro:
Por favor controlador de domínio chamado "controlador de domínio aqui", você pode me dizer todas as últimas modificacoes que foram feitas aos atributos deste objeto "distinguished name aqui" e também, a partir de qual controlador de domínio essa modificação foi feita ?
exemplo- O controlador de domínio chamado DC01 e o dintinguished name e CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com, o comando seria: repadmin /showobjmeta DC01 "CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com"
Certifique-se que o distinguished name sempre estará entre aspas.
1- Descobrindo o distinguished name do objeto que eu quero consultar;
2- Descobrindo os controladores de domínio do meu ambiente (se você for consultor, por exemplo, e não estiver familiarizado com o ambiente, isso pode lhe ajudar a descobrir os controladores de domínio do ambiente). Na verdade, NS e o record para name server. Assumindo o seu controlador de domínio e também um servidor DNS, você pode usar isso;
3- Repadmin syntaxe
A- AD Site e controlador de domínio de onde a modificação foi feita
B- Data e hora a modificação foi feita
C- Numero de vezes que esse atributo foi modificado
Se olharmos para o atributo "logonhours" aqui em cima, notaremos que ele foi modificado apenas uma vez, desde a sua criação. Isso ocorreu em 17 de Outubro de 2018 as 12:52:08.
Eu fui no AD e modifiquei esse atributo. Agora , se executarmos o comando novamente, poderemos ver que o que era antes "1" na coluna "Ver", agora recebe o valor "2". Ou seja, esse atributo foi modificado duas vezes e você pode ver a data e hora que foi modificado, como também em qual controlador de domínio.
As outras colunas (Loc. USN, Org.USN), são também interessantes mas deixaremos para um próximo post pois elas merecem um post só pra elas.
Basicamente, como o Active Directory e um ambiente multi-master, modificações podem ser feitas a partir de qualquer controlador de domínio e , e possível que o mesmo objeto seja modificado por dois admins diferentes em dois controladores de domínio diferentes, quase ao mesmo tempo. Nesse caso, USN vai ajudar o controlador de domínio a descobrir qual modificação e a mais recente.
Bônus
Algumas empresas que estão na ativa por muito tempo, podem ter havido muitas mudanças no ambiente e quando você executar esse comando, a lista pode ser enorme que resultara em dificuldade de entender.
Você pode usar "findstr" para filtrar sua output e tornar essa tarefa mais simples.
Por exemplo, se você apenas quer saber as modificações que ocorreram no ano corrente, você pode fazer assim:
repadmin /showobjmeta DC01 "CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com" | findstr "ano corrente aqui"
exemplo - Eu só quero saber o que foi modificado no ano de 2019. eu preciso fazer isso :
repadmin /showobjmeta DC01 "CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com" | findstr "2019"
E isso ai pessoal !! Eu espero que vocês tenham gostado do post de hoje e gostaria de agradecer pela sua visita.
Vejo vocês no próximo post.
=====================================================
Português
Como saber quando e em qual controlador de domínio um objeto do AD foi modificado pela última vez?
Parte do nosso trabalho como Administrator de Sistemas e fornecer, de vez em quando, informações que possam ajudar no troubleshooting de problemas que ocorreram na empresa.
Por exemplo:
Depois de um troubleshooting, foi descoberto que um problema aconteceu porque o atributo "mail" foi modificado em uma conta do AD. Então, você recebe a missão de identificar quando foi que este atributo foi modificado e em qual site ou controlador de domínio foi feita.
Você pode conseguir isso executando um comando chamado: repadmin :)
Você não poderá ver todas as modificações que foram feitas porque ele só guarda a última, mas você pode checar a data, hora e em qual controlador de domínio a última modificação foi feita.
Pre-requisitos
1. Powershell com o módulo Active Directory carregado;
2. Repadmin tool (dependendo da maquina que você vai executar, você pode ter que baixar o RSAT e instalar na maquina para ter disponível o comando Repadmin;
3. O objeto do AD que você quer investigar
Com isso em mãos, abra o powershell e digite:
Se for usuário
get-aduser "samaccountname" [ENTER]
Anote o "Distinguished Name" pois iremos usa-lo mais pra frente
Se for computador
get-adcomputer "samaccountname" [ENTER]
Anote o "Distinguished Name" pois iremos usa-lo mais pra frente
Se for grupo
get-adgroup "samaccountname" [ENTER]
Anote o "Distinguished Name" pois iremos usa-lo mais pra frente
Finalmente, você precisa saber o nome de um controlador do domínio.
Agora, a syntaxe que você ira usar:
repadmin /showobjmeta "controlador de domínio aqui" "Distinguished name aqui"
Em Português claro:
Por favor controlador de domínio chamado "controlador de domínio aqui", você pode me dizer todas as últimas modificacoes que foram feitas aos atributos deste objeto "distinguished name aqui" e também, a partir de qual controlador de domínio essa modificação foi feita ?
exemplo- O controlador de domínio chamado DC01 e o dintinguished name e CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com, o comando seria: repadmin /showobjmeta DC01 "CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com"
Certifique-se que o distinguished name sempre estará entre aspas.
1- Descobrindo o distinguished name do objeto que eu quero consultar;
2- Descobrindo os controladores de domínio do meu ambiente (se você for consultor, por exemplo, e não estiver familiarizado com o ambiente, isso pode lhe ajudar a descobrir os controladores de domínio do ambiente). Na verdade, NS e o record para name server. Assumindo o seu controlador de domínio e também um servidor DNS, você pode usar isso;
3- Repadmin syntaxe
A- AD Site e controlador de domínio de onde a modificação foi feita
B- Data e hora a modificação foi feita
C- Numero de vezes que esse atributo foi modificado
Se olharmos para o atributo "logonhours" aqui em cima, notaremos que ele foi modificado apenas uma vez, desde a sua criação. Isso ocorreu em 17 de Outubro de 2018 as 12:52:08.
Eu fui no AD e modifiquei esse atributo. Agora , se executarmos o comando novamente, poderemos ver que o que era antes "1" na coluna "Ver", agora recebe o valor "2". Ou seja, esse atributo foi modificado duas vezes e você pode ver a data e hora que foi modificado, como também em qual controlador de domínio.
As outras colunas (Loc. USN, Org.USN), são também interessantes mas deixaremos para um próximo post pois elas merecem um post só pra elas.
Basicamente, como o Active Directory e um ambiente multi-master, modificações podem ser feitas a partir de qualquer controlador de domínio e , e possível que o mesmo objeto seja modificado por dois admins diferentes em dois controladores de domínio diferentes, quase ao mesmo tempo. Nesse caso, USN vai ajudar o controlador de domínio a descobrir qual modificação e a mais recente.
Bônus
Algumas empresas que estão na ativa por muito tempo, podem ter havido muitas mudanças no ambiente e quando você executar esse comando, a lista pode ser enorme que resultara em dificuldade de entender.
Você pode usar "findstr" para filtrar sua output e tornar essa tarefa mais simples.
Por exemplo, se você apenas quer saber as modificações que ocorreram no ano corrente, você pode fazer assim:
repadmin /showobjmeta DC01 "CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com" | findstr "ano corrente aqui"
exemplo - Eu só quero saber o que foi modificado no ano de 2019. eu preciso fazer isso :
repadmin /showobjmeta DC01 "CN=user1,OU=Users,OU=IT,DC=Mydomain,DC=com" | findstr "2019"
E isso ai pessoal !! Eu espero que vocês tenham gostado do post de hoje e gostaria de agradecer pela sua visita.
Vejo vocês no próximo post.
Nice guide. How about if i want to know who made the changes/modification of particular ldap attribute?
ReplyDeleteHi there !
DeleteThanks for your comment.
You can leverage repadmin and auditing to find out who made the change. Here is a pretty cool article that talks about this : https://blogs.technet.microsoft.com/askpfeplat/2012/03/05/how-to-track-the-who-what-when-and-where-of-active-directory-attribute-changes-part-i-the-case-of-the-mysteriously-modified-upn/
Cheers,
Val