<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ldap389 &#187; BDD AD</title>
	<atom:link href="http://www.ldap389.info/category/bdd-ad/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ldap389.info</link>
	<description>Active Directory Blog</description>
	<lastBuildDate>Thu, 26 Jan 2012 11:37:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Extension de schema: Active Directory 2008</title>
		<link>http://www.ldap389.info/2011/01/22/extension-de-schema-active-directory-2008-r2-adprep/</link>
		<comments>http://www.ldap389.info/2011/01/22/extension-de-schema-active-directory-2008-r2-adprep/#comments</comments>
		<pubDate>Sat, 22 Jan 2011 01:30:33 +0000</pubDate>
		<dc:creator>ldap389</dc:creator>
				<category><![CDATA[BDD AD]]></category>
		<category><![CDATA[gpo]]></category>
		<category><![CDATA[troubleshooting]]></category>
		<category><![CDATA[adprep]]></category>
		<category><![CDATA[ntds.dit]]></category>
		<category><![CDATA[rodc]]></category>
		<category><![CDATA[schema]]></category>
		<category><![CDATA[sysvol]]></category>

		<guid isPermaLink="false">http://www.ldap389.info/?p=885</guid>
		<description><![CDATA[Dans ce post nous allons décrire quelques problèmes que vous pouvez rencontrer lors de l&#8217;extension de schéma pour Active Directory 2008 ou 2008R2. Les étapes de cette preparation de schéma sont décrites dans ce post de askDS. Commande: adprep /domainprep /gpprep:  Problèmes de droits: Lors du lancement de cette commande, vous avez un code d&#8217;erreur [...]]]></description>
			<content:encoded><![CDATA[<p>Dans ce post nous allons décrire quelques problèmes que vous pouvez rencontrer lors de l&#8217;extension de schéma pour Active Directory 2008 ou 2008R2. Les étapes de cette preparation de schéma sont décrites dans ce post de <a href="http://blogs.technet.com/b/askds/archive/2008/11/11/so-you-want-to-upgrade-to-windows-2008-domain-controllers-adprep.aspx">askDS</a>.<br />
<span id="more-885"></span></p>
<ol>
<li><span style="text-decoration: underline;">Commande: <em>adprep /domainprep /gpprep</em>:</span> 
<ul>
<li><span style="text-decoration: underline;">Problèmes de droits:</span></li>
<p>Lors du lancement de cette commande, vous avez un code d&#8217;erreur &#8220;<em>LDAP API ldap_modify_ext_s() finished, return code is 0&#215;32</em>&#8221; alors il s&#8217;agit problème de droits, la commande a pourtant bien été lancée avec un compte membre de <em>&#8220;domain admins&#8221;</em> . En ouvrant le fichier <em>adprep.log</em> nous avons les informations suivantes:</p>
<blockquote><p>[2010/11/26:15:12:19.468]<br />
Adprep was about to call the following LDAP API. ldap_modify_s(). The entry to modify is CN={64E2BDA7-0FC4-48DA-BB70-79261A7B4822},CN=Policies,CN=System<br />
,DC=ldap389,DC=info.<br />
[2010/11/26:15:12:19.468]<br />
LDAP API ldap_modify_ext_s() finished, return code is 0&#215;32</p></blockquote>
<p>Il s&#8217;agit d&#8217;un problème sur une GPO qui intervient lors de la partie <em>gpprep </em>du setup. Nous allons donc vérifier les permissions sur celle ci:</p>
<p><a href="http://www.ldap389.info/wp-content/uploads/2011/01/adprep_gpprep.jpg" rel="lightbox[885]"><img class="aligncenter size-medium wp-image-886" title="adprep_gpprep" src="http://www.ldap389.info/wp-content/uploads/2011/01/adprep_gpprep-300x158.jpg" alt="" width="300" height="158" /></a></p>
<p>L&#8217;administrateur qui a créé la GPO a retiré les droits au groupe <em>&#8220;domain admins&#8221;, </em>pour corriger cela il faut se mettre propriétaire de l&#8217;objet et rétablir les droits sur celui-ci. Une fois cela corrigé, la commande <em>adprep /domainprep /gpprep</em> passe sans problème.</p>
<li><span style="text-decoration: underline;">Remarque concernant le staging:</span></li>
<p>Si l&#8217;intervalle de réplication entre certains de vos contrôleurs de domaine est long (i.e. un de vos DCs réplique une fois tous les X jours avec ses partenaires de réplication) alors le <a href="http://blogs.technet.com/b/filecab/archive/2006/03/20/422544.aspx">répertoire de staging</a> de votre SYSVOL peut augmenter de manière conséquente, ceci de manière temporaire. En effet, l&#8217;ensemble des GPOs de votre domaine étant modifiées par la partie <em>gpprep</em> du setup, toutes ces modifications doivent être répliquées sur l&#8217;ensemble des DCs, le répertoire de staging voit alors sa taille augmenter tant que le DC répliquant le moins souvent n&#8217;a pas répliqué les modifications, cette taille baisse au fur et à mesure que ce DC réplique les modifications sur son partage SYSVOL.</ul>
</li>
<li><span style="text-decoration: underline;">Commande <em>adprep /rodcprep:</em></span></li>
<p>Si vous rencontrez le message d&#8217;erreur suivant: &#8220;<em>Adprep could not contact a replica for partition DC=DomainDnsZones,DC=ldap389,DC=info</em>&#8220;, alors il vous suffit de lancer le script correctif fournit dans cette <a href="http://support.microsoft.com/kb/949257/en-us">KB</a>.</ol>
<p>Si vous désirez lire plus d&#8217;articles concernant les erreurs avec <em>adprep</em> je vous conseille la lecture de cet <a href="http://technet.microsoft.com/en-us/library/dd464018(WS.10).aspx#BKMK_TshootAdprep">article technet</a> et de ce post de <a href="http://blogs.technet.com/b/askds/archive/2008/12/15/troubleshooting-adprep-errors.aspx">askDS</a>.</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Extension+de+schema%3A+Active+Directory+2008+http%3A%2F%2Fis.gd%2FwtO6Bf" title="Post to Twitter"><img class="nothumb" src="http://www.ldap389.info/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldap389.info/2011/01/22/extension-de-schema-active-directory-2008-r2-adprep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extension de schéma: Exchange 2010</title>
		<link>http://www.ldap389.info/2011/01/08/extensio-de-schema-exchange-2010-invalid-organization-name/</link>
		<comments>http://www.ldap389.info/2011/01/08/extensio-de-schema-exchange-2010-invalid-organization-name/#comments</comments>
		<pubDate>Sat, 08 Jan 2011 17:45:05 +0000</pubDate>
		<dc:creator>ldap389</dc:creator>
				<category><![CDATA[BDD AD]]></category>
		<category><![CDATA[troubleshooting]]></category>
		<category><![CDATA[Exchange]]></category>
		<category><![CDATA[ntds.dit]]></category>
		<category><![CDATA[schema]]></category>

		<guid isPermaLink="false">http://www.ldap389.info/?p=858</guid>
		<description><![CDATA[Dans ce post nous allons décrire différents problèmes rencontrés lors de l&#8217;extension du schéma pour Exchange 2010. Vous pouvez lire cet article technet pour la procédure détaillée de préparation du schéma AD pour Exchange 2010. Les principaux problèmes rencontrés sont apparus lors du lancement de la commande: &#8220;setup.com /PrepareAD /OrganizationName:&#60;Organization Name&#62;&#8221;. Nous allons voir la résolution  d&#8217;un [...]]]></description>
			<content:encoded><![CDATA[<p>Dans ce post nous allons décrire différents problèmes rencontrés lors de l&#8217;extension du schéma pour Exchange 2010. Vous pouvez lire cet article <a href="http://technet.microsoft.com/en-us/library/bb125224.aspx">technet</a> pour la procédure détaillée de préparation du schéma AD pour Exchange 2010.</p>
<p>Les principaux problèmes rencontrés sont apparus lors du lancement de la commande: &#8220;<em>setup.com /PrepareAD /OrganizationName:&lt;Organization Name&gt;&#8221;. </em>Nous allons voir la résolution  d&#8217;un problème bloquant et d&#8217;un warning.<br />
<span id="more-858"></span></p>
<ol>
<li><span style="text-decoration: underline;">Message d&#8217;erreur: &#8220;The Exchange organization name is invalid&#8221;:</span></li>
<p>Le setup sort en erreur avec le message d&#8217;erreur suivant, que l&#8217;on trouve dans le fichier Exchangesetup.log:</p>
<blockquote><p>The Exchange organization name is invalid. Message: &#8216;The property value you specified, &#8220;{335A1087-5131-4D45-BE3E-3C6C7F76F5EC}&#8221;, isn&#8217;t valid. The value must not contain &#8220;&#8216;~&#8217;, &#8216;`&#8217;, &#8216;!&#8217;, &#8216;@&#8217;, &#8216;#&#8217;, &#8216;$&#8217;, &#8216;%&#8217;, &#8216;^&#8217;, &#8216;&amp;&#8217;, &#8216;*&#8217;, &#8216;(&#8216;, &#8216;)&#8217;, &#8216;_&#8217;, &#8216;+&#8217;, &#8216;=&#8217;, &#8216;{&#8216;, &#8216;}&#8217;, &#8216;[', ']&#8216;, &#8216;|&#8217;, &#8216;\&#8217;, &#8216;:&#8217;, &#8216;;&#8217;, &#8216;&#8221;&#8216;, &#8221;&#8217;, &#8216;&lt;&#8217;, &#8216;&gt;&#8217;, &#8216;,&#8217;, &#8216;.&#8217;, &#8216;?&#8217;, &#8216;/&#8217;&#8221;.&#8217;</p></blockquote>
<p>Cela est du au fait qu&#8217;une précédente préparation du schéma pour Exchange 2003 a été réalisée, ceci sans qu&#8217;aucun serveur Exchange n&#8217;ai été installé dans votre domaine. La commande <em>setup /forestprep</em> créé un nom d&#8217;organisation temporaire avec le GUID mentionné ci dessus lors du lancement de la preparation de schéma pour Exchange 2003. Le nom d&#8217;organisation définitif n&#8217;est définit que lors de l&#8217;installation du premier serveur Exchange. Pour plus de détails sur l&#8217;extension de schéma pour Exchange 2003 vous pouvez lire <a href="http://www.msexchange.org/tutorials/Forestprep-Domainprep-Explained.html">cet article</a>. Dans les versions suivantes de Exchange, le nom de l&#8217;organisation est donné lors de la préparation du schéma AD.</p>
<p>Pour corriger cela il vous suffit d&#8217;utiliser le CD d&#8217;installation Exchange 2003 et de lancer la commande &#8220;<em>Setup /removeorg&#8221;, </em>ceci afin de supprimer l&#8217;organisation temporaire (voir <a href="http://support.microsoft.com/kb/273478">cette KB</a> pour plus de détails). Puis de relancer votre commande &#8220;<em>setup.com /PrepareAD /OrganizationName:&lt;Organization Name&gt;&#8221; </em>avec les sources Exchange 2010.</p>
<p>Ce problème a déjà été evoqué sur un <a href="http://social.technet.microsoft.com/Forums/en/exchangesvrdeploy/thread/8a79ae6e-9299-46a6-9bbe-6c44fa479c7c">forum technet</a> pour Exchange 2007, nous avons rencontré le même problème pour la preparation du schéma Exchange 2010. La même résolution est proposée.</p>
<li><span style="text-decoration: underline;">Warning: The recipient &#8220;ldap389.info/users/test-user&#8221; is invalid and couldn&#8217;t be updated:</span></li>
<p>Ce message d&#8217;avertissement ne bloque pas l&#8217;extension de schéma Exchange 2010. Mais peut poser problème lorsque la BAL pour <em>test-user</em> sera configurée. L&#8217;attribut <a href="http://msdn.microsoft.com/en-us/library/ms981776(EXCHG.65).aspx"><em>MailNickName</em></a> du compte possédait une valeur, cet attribut existait sur les comptes du domaine (apporté par la précédente modification de schéma Exchange 2003) mais a été utilisé pour les besoins d&#8217;une autre application que Exchange. La valeur de l&#8217;attribut a donc du être nettoyée afin d&#8217;éviter ces warnings</ol>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Extension+de+sch%C3%A9ma%3A+Exchange+2010+http%3A%2F%2Fis.gd%2FLtqQbD" title="Post to Twitter"><img class="nothumb" src="http://www.ldap389.info/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldap389.info/2011/01/08/extensio-de-schema-exchange-2010-invalid-organization-name/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Freeze de GPMC sur un Domain Controller</title>
		<link>http://www.ldap389.info/2010/05/21/freeze-gpmc-probleme-dc/</link>
		<comments>http://www.ldap389.info/2010/05/21/freeze-gpmc-probleme-dc/#comments</comments>
		<pubDate>Fri, 21 May 2010 10:17:24 +0000</pubDate>
		<dc:creator>ldap389</dc:creator>
				<category><![CDATA[BDD AD]]></category>
		<category><![CDATA[gpo]]></category>
		<category><![CDATA[troubleshooting]]></category>
		<category><![CDATA[cpu]]></category>
		<category><![CDATA[gplink]]></category>
		<category><![CDATA[gpmc]]></category>
		<category><![CDATA[lsass]]></category>
		<category><![CDATA[ntds.dit]]></category>

		<guid isPermaLink="false">http://www.ldap389.info/?p=574</guid>
		<description><![CDATA[Dans cet article nous allons décrire un problème rencontré sur notre infrastructure de production et détailler sa résolution. L&#8217;incident est le suivant: A partir de nos postes d&#8217;administration la GPMC freezait dès que l&#8217;on clickait sur une OU afin d&#8217;afficher les GPOs liées à celle ci, le problème ne se produisait que en étant connecté à un DC [...]]]></description>
			<content:encoded><![CDATA[<p>Dans cet article nous allons décrire un problème rencontré sur notre infrastructure de production et détailler sa résolution. L&#8217;incident est le suivant: A partir de nos postes d&#8217;administration la GPMC freezait dès que l&#8217;on clickait sur une OU afin d&#8217;afficher les GPOs liées à celle ci, le problème ne se produisait que en étant connecté à un DC en particulier: Dans notre cas il s&#8217;agissait du PDC Emulator, si nous indiquions à la console de <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;214676&amp;Product=win20">pointer sur un DC différent</a>, la GPMC fonctionnait normalement.</p>
<p>L&#8217;application et la réplication des GPOs dans notre domaine fonctionnait normalement, par contre l&#8217;édition des stratégies de groupe sur le DC impacté devenait impossible, en même temps que la GPMC freezait une surcharge CPU du process lsass.exe survenait sur le contrôleur de domaine et ceci tant que la GPMC n&#8217;était pas killée sur la console. Nous avons donc continué à éditer nos GPOs à partir d&#8217;autres DCs et le fonctionnement de la production était quasi-normal le temps de la résolution de l&#8217;incident.</p>
<p><span id="more-574"></span><br />
Afin de mieux comprendre le problème, la première chose à faire est de lancer lors du freeze de GPMC une analyse avec <a href="http://www.microsoft.com/downloads/details.aspx?familyid=61a41d78-e4aa-47b9-901b-cf85da075a73&amp;displaylang=en">Server Performance Advisor</a> sur le DC dont voici le résultat:<br />
<a href="http://www.ldap389.info/wp-content/uploads/2010/05/spa.jpg" rel="lightbox[574]"><img class="aligncenter size-medium wp-image-575" title="server performance advisor lsass" src="http://www.ldap389.info/wp-content/uploads/2010/05/spa-300x125.jpg" alt="" width="300" height="125" /></a></p>
<p>On voit que le DC a du mal à effectuer une recherche LDAP initiée par la GPMC et cela entraine une consommation anormale du process lsass.exe, afin d&#8217;en savoir plus nous réalisons deux analyses de trames avec <a href="http://www.wireshark.org/">WireShark</a> sur nos consoles d&#8217;administration: La première en reproduisant le problème en lançant la GPMC connecté au DC impacté, la seconde en connectant la GPMC à un autre DC et sur lequel l&#8217;édition de GPOs est possible:</p>
<p><a href="http://www.ldap389.info/wp-content/uploads/2010/05/wireshark-ldap.jpg" rel="lightbox[574]"><img class="aligncenter size-medium wp-image-577" title="wireshark-ldap" src="http://www.ldap389.info/wp-content/uploads/2010/05/wireshark-ldap-217x300.jpg" alt="" width="217" height="300" /></a></p>
<p>On voit que sur le DC posant problème la requête LDAP n&#8217;aboutit pas, au bout de plus de 2 minutes toujours pas de résultat. Lors d&#8217;un fonctionnement normal de la GPMC, les GPOs liées à notre OU sont trouvées en quelques secondes.</p>
<p>Il nous faut maintenant identifier quelle requête LDAP n&#8217;arrive pas à traiter notre DC, pour cela nous allons activer le diagnostique Active Directory <a href="http://support.microsoft.com/kb/314980/en-us"><em>Field Engineering</em></a>, l&#8217;événement <a href="http://support.microsoft.com/kb/951581/en-us">d&#8217;ID 1644 </a>sera alors généré lorsque le problème survient, celui ci est caractéristique d&#8217;une requête LDAP consommant trop de ressources. Une fois l&#8217;audit activé, nous avons alors l&#8217;événement suivant qui apparaît lors du freeze de GPMC:</p>
<p><a href="http://www.ldap389.info/wp-content/uploads/2010/05/EventField.jpg" rel="lightbox[574]"><img class="aligncenter size-medium wp-image-578" title="Event 1644" src="http://www.ldap389.info/wp-content/uploads/2010/05/EventField-269x300.jpg" alt="" width="269" height="300" /></a></p>
<p>Les valeurs retournées par la requête sont <a href="http://msdn.microsoft.com/en-us/library/cc232505%28PROT.13%29.aspx"><em>GPLink et GPOptions</em></a> (on peut d&#8217;ailleurs observer le résultat sur la capture de trames réseau).  Le filtre de recherche se fait sur <a href="http://msdn.microsoft.com/en-us/library/ms677612%28VS.85%29.aspx"><em>ObjectCategory</em></a> qui est un <a href="http://support.microsoft.com/kb/257218/en-us">attribut indexé</a> par défaut de la base AD. La requête LDAP devrait donc être réalisée rapidement, ce qui n&#8217;est pas du tout le cas, nous en avons malheureusement la confirmation en lançant la même requête avec <a href="http://support.microsoft.com/kb/224543/en-us">ldp.exe</a>, le résultat est le suivant:</p>
<blockquote><p>&#8212;&#8212;&#8212;&#8211;<br />
***Searching&#8230;<br />
ldap_search_ext_s(ld, &#8220;DC=ldap389,DC=info&#8221;<br />
, 2, &#8220;( |  (objectCategory=CN=Domain-DNS,CN=Schema,CN=Configuration,DC=ldap389,DC=info)  (objectCategory=CN=Organizational-Unit,CN=Schema,CN=Configuration,DC=ldap389,DC=info) )&#8221;, attrList,  0, svrCtrls, ClntCtrls, 10, 0 ,&amp;msg)<br />
Error: Search: Timeout. &lt;85&gt;<br />
Server error:<br />
Error&lt;94&gt;: ldap_parse_result failed: No result present in message<br />
Getting 0 entries:<br />
&#8212;&#8212;&#8212;&#8211;</p></blockquote>
<p>La requête tombe en Timeout, alors que sur les autres DCs aucun problème avec celle ci. Nous avons donc décidé dans un premier temps d&#8217;augmenter la valeur du paramètre <em>MaxQueryDuration</em> des <a href="http://support.microsoft.com/kb/315071/en-us">stratégies LDAP</a> de notre DC, ainsi que de configurer ldp.exe afin d&#8217;augmenter la période de TimeOut. Ces manipulations n&#8217;ont servi à rien.</p>
<p>Après quelques recherches nous sommes tombés sur <a href="http://blogs.technet.com/ad/archive/2008/04/01/how-to-create-a-mosiac-of-user-thumbnails-in-aduc-dsa-msc.aspx">cet article</a> très instructif de Tim Springston. Il affirme que:</p>
<blockquote><p><em>&#8220;if the attribute(s) which are showing as taking an extended amount of time to search for are already indexed then the lack of an index is clearly not your problem.  Sometimes indices, perhaps through frequent changes or other reasons, need to be re-indexed to remove &#8220;whitespace&#8221; or other problems.  So checking the integrity of the database or doing an offline defrag may be the way to go.&#8221;</em></p></blockquote>
<p>Procédons donc d&#8217;abord à une <a href="http://support.microsoft.com/kb/315136/en-us">analyse sémantique </a>du ntds.dit de notre DC:</p>
<p><a href="http://www.ldap389.info/wp-content/uploads/2010/05/semanalysis.jpg" rel="lightbox[574]"><img class="aligncenter size-medium wp-image-579" title="semantic-analysis-ad" src="http://www.ldap389.info/wp-content/uploads/2010/05/semanalysis-300x95.jpg" alt="" width="300" height="95" /></a></p>
<p>Le résultat est immédiat: des inconsistances dans la base ont été trouvées. Nous relançons cette fois la même analyse sur la base, mais en mode <em><a href="http://support.microsoft.com/kb/258062/en-us">&#8220;fixer les problèmes&#8221;</a></em> (voir point 11 de la KB). Pour terminer nous réalisons une <a href="http://support.microsoft.com/kb/232122/en-us">défragmentation offline</a> du ndts.dit et nous quittons le mode DSRM pour rebooter notre DC normalement.</p>
<p>Une fois le DC redémarré nous essayons d&#8217;utiliser la GPMC en étant connecté sur le DC qui posait problème: L&#8217;utilisation de l&#8217;éditeur de stratégies de groupe se fait normalement et nous pouvons à nouveau éditer des GPOs sur ce contrôleur de domaine.</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Freeze+de+GPMC+sur+un+Domain+Controller+http%3A%2F%2Fis.gd%2FyrUgNQ" title="Post to Twitter"><img class="nothumb" src="http://www.ldap389.info/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldap389.info/2010/05/21/freeze-gpmc-probleme-dc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Réduire la taille de votre ntds.dit</title>
		<link>http://www.ldap389.info/2010/03/18/reduire-la-taille-de-votre-ntds-dit/</link>
		<comments>http://www.ldap389.info/2010/03/18/reduire-la-taille-de-votre-ntds-dit/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 13:04:37 +0000</pubDate>
		<dc:creator>ldap389</dc:creator>
				<category><![CDATA[BDD AD]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[ntds.dit]]></category>
		<category><![CDATA[tombstone]]></category>
		<category><![CDATA[vbs]]></category>

		<guid isPermaLink="false">http://www.ldap389.info/?p=177</guid>
		<description><![CDATA[Nous allons voir dans ce post comment effectuer un nettoyage de printemps sur votre base de données AD: Le fichier ntds.dit. Dans un premier temps il vous faudra repérer les objets inutiles dans votre domaine, suite à ce premier audit, si peu d&#8217;objets sont détectés comme inutiles, n&#8217;espérez pas gagner beaucoup d&#8217;espace. Pour information un [...]]]></description>
			<content:encoded><![CDATA[<p>Nous allons voir dans ce post comment effectuer un nettoyage de printemps sur votre base de données AD: Le fichier ntds.dit.<br />
Dans un premier temps il vous faudra repérer les objets inutiles dans votre domaine, suite à ce premier audit, si peu d&#8217;objets sont détectés comme inutiles, n&#8217;espérez pas gagner beaucoup d&#8217;espace. Pour information un objet utilisateur prend une taille minimale de 4ko dans votre base, après tout dépend du nombre d&#8217;attributs édités. Voir <a href="http://technet.microsoft.com/en-us/library/cc961779.aspx">cet article</a> pour plus d&#8217;informations.<br />
<span id="more-177"></span><br />
Nous allons via un script repérer les objets utilisateurs et ordinateurs inutiles. Ce script ne fonctionne que si le niveau fonctionnel minimal de votre domaine est Windows 2003 car l&#8217;attribut utilisé pour repérer les vieux objets utilisateurs est le LastLogonTimeStamp, attribut répliqué sur tous vos DCs, contrairement à LastLogon. Si cet attribut a une valeur vide alors l&#8217;utilisateur ne s&#8217;est jamais logué, sinon nous pouvons obtenir la dernière date d&#8217;accès au domaine, via l&#8217;algorithme utilisé dans le script. Pour les comptes ordinateurs nous nous basons sur l&#8217;attribut PwdLastSet qui correspond à la date de dernier renouvellement de mot de passe machine. Pour plus d&#8217;informations concernant l&#8217;identification des objets ordinateurs et utilisateurs non utilisés vous pouvez lire <a href="http://blogs.technet.com/ken_brumfield/archive/2008/09/16/identifying-stale-user-and-computer-accounts.aspx">cet article.</a><br />
Voici le script utilisé pour repérer les comptes ordinateurs et utilisateurs non utilisés:</p>

<div class="wp_syntax"><div class="code"><pre class="vb" style="font-family:monospace;">&nbsp;
<span style="color: #151B8D; font-weight: bold;">On</span> <span style="color: #151B8D; font-weight: bold;">Error</span> <span style="color: #151B8D; font-weight: bold;">Resume</span> <span style="color: #8D38C9; font-weight: bold;">Next</span>
&nbsp;
<span style="color: #008000;">'Input domain's distinguishedname
</span>DomainDN = <span style="color: #800000;">&quot;dc=ldap389,dc=info&quot;</span>
&nbsp;
Const ForAppending = 8
Const ADS_SCOPE_SUBTREE = 2
&nbsp;
<span style="color: #008000;">'We search for objects stale since 6 months
</span>dtmDateValue = DateAdd(<span style="color: #800000;">&quot;m&quot;</span>, -6, now)
&nbsp;
<span style="color: #151B8D; font-weight: bold;">Set</span> objShell = <span style="color: #E56717; font-weight: bold;">CreateObject</span>(<span style="color: #800000;">&quot;Wscript.Shell&quot;</span>)
lngBiasKey = objShell.RegRead(<span style="color: #800000;">&quot;HKLMSystemCurrentControlSetControl&quot;</span> _
    &amp; <span style="color: #800000;">&quot;TimeZoneInformationActiveTimeBias&quot;</span>)
<span style="color: #8D38C9; font-weight: bold;">If</span> (UCase(TypeName(lngBiasKey)) = <span style="color: #800000;">&quot;LONG&quot;</span>) <span style="color: #8D38C9; font-weight: bold;">Then</span>
    lngBias = lngBiasKey
<span style="color: #8D38C9; font-weight: bold;">ElseIf</span> (UCase(TypeName(lngBiasKey)) = <span style="color: #800000;">&quot;VARIANT()&quot;</span>) <span style="color: #8D38C9; font-weight: bold;">Then</span>
    lngBias = 0
    <span style="color: #8D38C9; font-weight: bold;">For</span> k = 0 <span style="color: #8D38C9; font-weight: bold;">To</span> <span style="color: #151B8D; font-weight: bold;">UBound</span>(lngBiasKey)
        lngBias = lngBias + (lngBiasKey(k) * 256^k)
    <span style="color: #8D38C9; font-weight: bold;">Next</span>
<span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #8D38C9; font-weight: bold;">If</span>
&nbsp;
<span style="color: #008000;">' Convert datetime value to UTC.
</span>dtmAdjusted = DateAdd(<span style="color: #800000;">&quot;n&quot;</span>, lngBias, dtmDateValue)
&nbsp;
<span style="color: #008000;">' Find number of seconds since 1/1/1601.
</span>lngSeconds = DateDiff(<span style="color: #800000;">&quot;s&quot;</span>, #1/1/1601#, dtmAdjusted)
&nbsp;
<span style="color: #008000;">' Convert the number of seconds to a string
</span><span style="color: #008000;">' and convert to 100-nanosecond intervals.
</span>str64Bit = CStr(lngSeconds) &amp; <span style="color: #800000;">&quot;0000000&quot;</span>
&nbsp;
<span style="color: #151B8D; font-weight: bold;">Set</span> fso = <span style="color: #E56717; font-weight: bold;">CreateObject</span>(<span style="color: #800000;">&quot;Scripting.FileSystemObject&quot;</span>)
&nbsp;
CibleFileOU = <span style="color: #800000;">&quot;Resultsusers.csv&quot;</span>
CibleFileOU2 = <span style="color: #800000;">&quot;Resultscpu.csv&quot;</span>
&nbsp;
<span style="color: #151B8D; font-weight: bold;">Set</span> df3 = fso.OpenTextFile(CibleFileOU,ForAppending,<span style="color: #00C2FF; font-weight: bold;">True</span>)
<span style="color: #151B8D; font-weight: bold;">Set</span> df4 = fso.OpenTextFile(CibleFileOU2,ForAppending,<span style="color: #00C2FF; font-weight: bold;">True</span>)
&nbsp;
<span style="color: #151B8D; font-weight: bold;">Set</span> objConnection = <span style="color: #E56717; font-weight: bold;">CreateObject</span>(<span style="color: #800000;">&quot;ADODB.Connection&quot;</span>)
<span style="color: #151B8D; font-weight: bold;">Set</span> objCommand =   <span style="color: #E56717; font-weight: bold;">CreateObject</span>(<span style="color: #800000;">&quot;ADODB.Command&quot;</span>)
objConnection.Provider = <span style="color: #800000;">&quot;ADsDSOObject&quot;</span>
objConnection.<span style="color: #151B8D; font-weight: bold;">Open</span> <span style="color: #800000;">&quot;Active Directory Provider&quot;</span>
<span style="color: #151B8D; font-weight: bold;">Set</span> objCommand.ActiveConnection = objConnection
&nbsp;
objCommand.Properties(<span style="color: #800000;">&quot;Page Size&quot;</span>) = 1000
objCommand.Properties(<span style="color: #800000;">&quot;Searchscope&quot;</span>) = ADS_SCOPE_SUBTREE 
&nbsp;
objCommand.CommandText =_
    <span style="color: #800000;">&quot;SELECT DistinguishedName,sAMAccountName,lastLogonTimestamp FROM 'LDAP://&quot;</span>&amp;DomainDN&amp;<span style="color: #800000;">&quot;' WHERE objectCategory='user' AND lastLogonTimestamp &lt; '&quot;</span>&amp;str64Bit&amp;<span style="color: #800000;">&quot;'&quot;</span>
&nbsp;
<span style="color: #151B8D; font-weight: bold;">Set</span> objRecordSet = objCommand.Execute
&nbsp;
objRecordSet.MoveFirst
<span style="color: #8D38C9; font-weight: bold;">Do</span> <span style="color: #8D38C9; font-weight: bold;">Until</span> objRecordSet.EOF
&nbsp;
disting = objRecordSet.Fields(<span style="color: #800000;">&quot;DistinguishedName&quot;</span>).Value
SAM = objRecordSet.Fields(<span style="color: #800000;">&quot;sAMAccountName&quot;</span>).Value
<span style="color: #151B8D; font-weight: bold;">Set</span> StrFlagMCP = objRecordSet.Fields(<span style="color: #800000;">&quot;lastLogonTimestamp&quot;</span>).Value
&nbsp;
           intLastLogonTime0 = StrFlagMCP.HighPart * (2^32) + StrFlagMCP.LowPart
           intLastLogonTime0 = intLastLogonTime0 / (60 * 10000000)
           intLastLogonTime0 = intLastLogonTime0 / 1440
           <span style="color: #008000;">'Convert lastlogontimestamp in date format
</span>           StrFlagPwd = intLastLogonTime0 + #1/1/1601#
&nbsp;
df3.writeline(SAM&amp;<span style="color: #800000;">&quot;;&quot;</span>&amp;StrFlagPwd&amp;<span style="color: #800000;">&quot;;&quot;</span>&amp;disting)
&nbsp;
objRecordSet.MoveNext
<span style="color: #8D38C9; font-weight: bold;">Loop</span>
&nbsp;
objCommand.CommandText =_
    <span style="color: #800000;">&quot;SELECT DistinguishedName,sAMAccountName,lastLogonTimestamp,WhenCreated FROM 'LDAP://&quot;</span>&amp;DomainDN&amp;<span style="color: #800000;">&quot;' WHERE objectCategory='user' AND NOT lastLogonTimestamp = '*'&quot;</span>
&nbsp;
<span style="color: #151B8D; font-weight: bold;">Set</span> objRecordSet2 = objCommand.Execute
&nbsp;
objRecordSet2.MoveFirst
<span style="color: #8D38C9; font-weight: bold;">Do</span> <span style="color: #8D38C9; font-weight: bold;">Until</span> objRecordSet2.EOF
&nbsp;
disting = objRecordSet2.Fields(<span style="color: #800000;">&quot;DistinguishedName&quot;</span>).Value
SAM = objRecordSet2.Fields(<span style="color: #800000;">&quot;sAMAccountName&quot;</span>).Value
LastLOG = objRecordSet2.Fields(<span style="color: #800000;">&quot;lastLogonTimestamp&quot;</span>).Value
Whencreate = objRecordSet2.Fields(<span style="color: #800000;">&quot;WhenCreated&quot;</span>).Value
&nbsp;
df3.writeline(SAM&amp;<span style="color: #800000;">&quot;;NEVER LOGGED;&quot;</span>&amp;disting&amp;<span style="color: #800000;">&quot;;&quot;</span>&amp;Whencreate)
&nbsp;
objRecordSet2.MoveNext
<span style="color: #8D38C9; font-weight: bold;">Loop</span>
&nbsp;
objCommand.CommandText =_
    <span style="color: #800000;">&quot;SELECT DistinguishedName,sAMAccountName,lastLogonTimestamp FROM 'LDAP://&quot;</span>&amp;DomainDN&amp;<span style="color: #800000;">&quot;' WHERE objectCategory='computer' AND PwdLastSet &lt; '&quot;</span>&amp;str64Bit&amp;<span style="color: #800000;">&quot;'&quot;</span>  
&nbsp;
<span style="color: #151B8D; font-weight: bold;">Set</span> objRecordSet3 = objCommand.Execute
&nbsp;
objRecordSet3.MoveFirst
<span style="color: #8D38C9; font-weight: bold;">Do</span> <span style="color: #8D38C9; font-weight: bold;">Until</span> objRecordSet3.EOF
&nbsp;
disting = objRecordSet3.Fields(<span style="color: #800000;">&quot;DistinguishedName&quot;</span>).Value
SAM = objRecordSet3.Fields(<span style="color: #800000;">&quot;sAMAccountName&quot;</span>).Value
&nbsp;
<span style="color: #151B8D; font-weight: bold;">set</span> StrFlagMCP = objRecordSet3.Fields(<span style="color: #800000;">&quot;lastLogonTimestamp&quot;</span>).Value
&nbsp;
           intLastLogonTime0 = StrFlagMCP.HighPart * (2^32) + StrFlagMCP.LowPart
           intLastLogonTime0 = intLastLogonTime0 / (60 * 10000000)
           intLastLogonTime0 = intLastLogonTime0 / 1440
           StrFlagPwd = intLastLogonTime0 + #1/1/1601#
&nbsp;
df4.writeline(SAM&amp;<span style="color: #800000;">&quot;;&quot;</span>&amp;StrFlagPwd&amp;<span style="color: #800000;">&quot;;&quot;</span>&amp;disting)
&nbsp;
objRecordSet3.MoveNext
<span style="color: #8D38C9; font-weight: bold;">Loop</span>
&nbsp;
df3.<span style="color: #8D38C9; font-weight: bold;">close</span>
df4.<span style="color: #8D38C9; font-weight: bold;">close</span>
&nbsp;
msgbox <span style="color: #800000;">&quot;done!</span></pre></div></div>

<p>Pour télécharger le vbs c&#8217;est ici:</p>
<p><a href="http://www.ldap389.info/wp-content/uploads/2010/07/oldobjects.txt"><img class="aligncenter size-full wp-image-83" title="tool" src="http://www.ldap389.info/wp-content/uploads/2010/03/tool1.png" alt="" width="48" height="48" /></a></p>
<p>Changer la valeur de <em>DomainDN</em> en indiquant le DistinguishedName de votre domaine, ici on recherche les objets inactifs depuis 6 mois, changer la valeur <em>dtmDateValue</em> si vous désirez utiliser un autre seuil.</p>
<p>Les résultats concernant les comptes utilisateurs sont retournés dans le fichier <em>Resultsusers.csv.</em> Pour les comptes dont le LastLogonTimeStamp est nul, la date de création du compte est indiqué, car un utilisateur dont le compte a été créé il y a quelques jours peut ne s&#8217;être toujours pas logué. Une fois le tri fait vous pouvez désactiver les comptes avant de les supprimer, si il n&#8217;y a pas de retour de la part de votre hotline d&#8217;ici quelques semaines alors vous pourrez les supprimer.</p>
<p>Les résultats concernant les comptes ordinateurs sont retournés dans le fichier <em>Resultscpu.csv</em> , attention certains objets ordinateurs de votre AD dont l&#8217;OS n&#8217;est pas Windows (serveurs CIFS, OS X&#8230;) ainsi que les objets Microsoft Cluster Server Virtual Server peuvent ne pas mettre à jour leur attribut PwdLastSet, il faudra les exclure de votre liste.</p>
<p>Nous allons maintenant nous intéresser aux objets de stratégie de groupe inutiles dans votre domaine. Pour cela il vous suffit d&#8217;utiliser les scripts <a href="http://wmug.co.uk/blogs/1972/archive/2006/05/01/39.aspx">fournis avec la GPMC</a> qui se trouvent dans <em>%programfiles%gpmcscripts. </em>Nous allons simplement lister les GPOs désactivées et non liées avec les scripts <em>FindDisabledGPOs.wsf</em> et <em>FindUnlinkedGPOs.wsf</em>. Si il s&#8217;avère que vous ne vous servez plus de ces GPOs vous pouvez les supprimer.</p>
<p>Bien maintenant vous avez supprimé tous ces objets et la taille votre ntds.dit n&#8217;a pas bougé et cela pour deux raisons:</p>
<p>Tout d&#8217;abord vos objets effacés sont tombstonés, ils ne sont pas encore supprimés del&#8217;AD et cela pour une période de 60 ou 180 jours (<a href="http://msmvps.com/blogs/ulfbsimonweidner/archive/2010/02/10/adjusting-the-tombstone-lifetime.aspx">paramétrage par défaut</a>), c&#8217;est le <a href="http://technet.microsoft.com/en-us/library/cc784932(WS.10).aspx">TombstoneLifeTime</a>, ceci de façon à être réanimés facilement en cas de suppression accidentelle, une partie des attributs sont effacés mais pas tous. Pour plus d&#8217;informations sur le détail des attributs sauvegardés voir cet <a href="http://technet.microsoft.com/en-us/magazine/2007.09.tombstones.aspx?pr=blog">article</a>. Par ailleurs pour les réanimation d&#8217;objets du Tombstone je vous conseille <a href="http://blogs.microsoft.co.il/files/folders/guyt/entry40811.aspx">ADRestore.NET</a> qui est la version graphique de <a href="http://technet.microsoft.com/en-us/sysinternals/bb963906.aspx">ADrestore</a>. Si vous avez activé la <a href="http://technet.microsoft.com/en-us/library/dd392261(WS.10).aspx">corbeille</a> sous 2008, ces outils ne vous sont pas utiles.</p>
<p>Si vous etes une personne pressée vous pouvez réduire ce <a href="http://www.petri.co.il/changing_the_tombstone_lifetime_windows_ad.htm">TombstoneLifeTime</a> avec adsiedit.msc en changeant la valeur (exprimée en jours) de l&#8217;attribut tombstonelifetime dans la partition de configuration <em>cn=directory service,cn=windows nt,cn=services,cn=configuration,dc=&lt;forestDN&gt;. </em>Attention cette manipulation peut s&#8217;avérer dangereuse, le TombstoneLifeTime ne doit jamais être inférieur au délai de réplication d&#8217;un objet au sein de toute votre forêt. Une fois tous les objets réellement supprimés du Tombstone n&#8217;oubliez pas de remettre la valeur par défaut à votre attribut tombstonelifetime. Par ailleurs ci une suppression accidentelle a lieu pendant que vous avez réduit la valeur de cet attribut vous riquez de devoir restaurer les comptes avec un backup. Ce paragraphe est à titre informatif, ne pas utiliser cette méthode si vous considérez que c&#8217;est trop risqué.</p>
<p>La deuxième raison est qu&#8217;une fois tous les objets supprimés du Tombstone il faut défragmenter le fichier ntds.dit hors ligne. Nous allons avant cela activer un audit afin de voir quel gain de place nous pouvons espérer d&#8217;une telle défragmentation. Pour cela activer sur vos DCs le <a href="http://support.microsoft.com/kb/314980">diagnostic de <em>garbage collection</em></a>, une fois la valeur <em>6 Garbage Collection</em> de la clef HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNTDSDiagnostics égale à un nous avons un événement d&#8217;<a href="http://www.eventid.net/display.asp?eventid=1646&amp;eventno=4029&amp;source=NTDS Database&amp;phase=1">ID 164</a> enregistré dans le journal d&#8217;évènements lors de chaque défragmentation en ligne de la base (toutes les 12heures).</p>
<p><a title="garbage collection" rel="lightbox" href="http://www.ldap389.info/wp-content/uploads/2010/03/offlinedefrag.jpg"><img class="aligncenter size-medium wp-image-194" title="Click to enlarge" src="http://www.ldap389.info/wp-content/uploads/2010/03/offlinedefrag-268x300.jpg" alt="" width="268" height="300" /></a></p>
<p>Sur l&#8217;exemple donné, le gain est de 584Mo si nous effectuons une défragmentation hors ligne. Il s&#8217;agit d&#8217;un cas extrême, n&#8217;espérez pas gagner autant de place sur votre environnement, à moins d&#8217;avoir supprimé quelques dizaines de milliers d&#8217;objets. Ensuite il ne vous reste plus qu&#8217;à suivre la procédure fournie par <a href="http://support.microsoft.com/kb/232122">Microsoft.</a></p>
<p><a title="Offline defrag" rel="lightbox" href="http://www.ldap389.info/wp-content/uploads/2010/03/defragoffline2.jpg"><img class="aligncenter size-medium wp-image-195" title="click to enlarge" src="http://www.ldap389.info/wp-content/uploads/2010/03/defragoffline2-300x146.jpg" alt="" width="300" height="146" /></a></p>
<p>Cette procédure prend de 5 à 10 minutes, hors temps de reboot en mode <a href="http://technet.microsoft.com/en-us/library/cc794729(WS.10).aspx">DSRM</a> sous Windows 2003, en 2008 il vous suffit de stopper le service AD. Vous devrez effectuer cette opération sur chacun des DCs car ce gain de place ne se réplique évidemment pas. Ce sont les changements sur les objets qui sont répliqués et non la base elle même.</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=R%C3%A9duire+la+taille+de+votre+ntds.dit+http%3A%2F%2Fis.gd%2FIXRW3s" title="Post to Twitter"><img class="nothumb" src="http://www.ldap389.info/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldap389.info/2010/03/18/reduire-la-taille-de-votre-ntds-dit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

