<?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>Erwan Guillemard &#8211; erwan.guillemard</title>
	<atom:link href="https://erwanguillemard.com/author/erwanguillemardgmail-com/feed/" rel="self" type="application/rss+xml" />
	<link>https://erwanguillemard.com</link>
	<description>Blog personnel</description>
	<lastBuildDate>Sat, 18 Apr 2026 11:32:22 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://erwanguillemard.com/wp-content/uploads/2024/02/cropped-Logo-sans-baseline-32x32.png</url>
	<title>Erwan Guillemard &#8211; erwan.guillemard</title>
	<link>https://erwanguillemard.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Apps &#8211; OLLAMA</title>
		<link>https://erwanguillemard.com/apps-ollama/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 18 Apr 2026 11:32:22 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[OLLAMA]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3440</guid>

					<description><![CDATA[Pour ce nouveau billet, je pense que commencer par une définition est une bonne chose. Robot : nom masculin, du tchèque robota, travail forcé, mot créé en 1920 par K. Capek. Dans les œuvres de science-fiction, machine à l&#8217;aspect humain, capable de se mouvoir, d&#8217;exécuter des opérations, de parler. Appareil automatique capable de manipuler des...]]></description>
										<content:encoded><![CDATA[
<p>Pour ce nouveau billet, je pense que commencer par une définition est une bonne chose.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-small-font-size"><strong>Robot :</strong> nom masculin, du tchèque <strong>robota</strong>, travail forcé, mot créé en 1920 par K. Capek.</p>



<p class="has-small-font-size"><em>Dans les œuvres de science-fiction, machine à l&rsquo;aspect humain, capable de se mouvoir, d&rsquo;exécuter des opérations, de parler.</em></p>



<p class="has-small-font-size"><em>Appareil automatique capable de manipuler des objets ou d&rsquo;exécuter des opérations selon un programme fixe, modifiable ou adaptable.</em></p>
<cite><a href="https://www.larousse.fr/dictionnaires/francais/robot/69647">Définition Larousse</a></cite></blockquote>



<p>Au vu du titre de cet article et de la définition posée précédemment, difficile de ne pas deviner le sujet qui va être abordé.</p>



<p>Hé oui, moi le puriste, je vais parler d&rsquo;IA<sup data-fn="cfefe833-a7a4-4019-87c1-c684487526cf" class="fn"><a href="#cfefe833-a7a4-4019-87c1-c684487526cf" id="cfefe833-a7a4-4019-87c1-c684487526cf-link">1</a></sup> et pire que cela l&rsquo;utiliser de manière récurrente. Je me sens en ce moment comme le capitaine Haddock face au lama dans l&rsquo;œuvre d&rsquo;Hergé, Tintin et le temple du soleil.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="504" height="267" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_Tintin.jpg" alt="" class="wp-image-3444" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_Tintin.jpg 504w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_Tintin-300x159.jpg 300w" sizes="(max-width: 504px) 100vw, 504px" /></figure>
</div>


<p>Naturellement, au vu de mes précédents écrits, c&rsquo;est vous lecteurs et l&rsquo;ensemble des solutions IA qui me crachent dessus. C&rsquo;est l&rsquo;arroseur arrosé en somme, moi qui ne voulais pas entendre parler de ça&#8230;</p>



<p class="has-text-align-center"><strong>Mais alors pourquoi un tel revirement de situation M&rsquo;sieur GUILLEMARD ?</strong></p>



<p>Je pense qu&rsquo;il faut vivre avec son temps et ignorer cet outil technologique serait signer mon arrêt de mon mort d&rsquo;ici quelques années et devenir un être <strong><em>never been</em></strong> à défaut d&rsquo;<strong><em>has been</em></strong>&#8230;</p>



<p class="has-text-align-center"><strong>Après tout <em><mark style="background-color:rgba(0, 0, 0, 0);color:#fe0404" class="has-inline-color">Errare humanum est, perseverare diabolicum</mark></em></strong><sup data-fn="aadcbef0-7f66-4bcf-bdef-699e3c85609a" class="fn"><a href="#aadcbef0-7f66-4bcf-bdef-699e3c85609a" id="aadcbef0-7f66-4bcf-bdef-699e3c85609a-link">2</a></sup><strong> non ?</strong></p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p>J&rsquo;ai pris le parti d&rsquo;être méfiant vis à vis des outils d&rsquo;IA en ligne gratuit ou du moins libre d&rsquo;utilisation.</p>



<ul class="wp-block-list">
<li>ChatGPT</li>



<li>Gemini</li>



<li>Copilot</li>



<li>Claude</li>



<li>&#8230;</li>
</ul>



<p>Je ne me mouille pas trop dans les moteurs d&rsquo;IA&#8230;</p>



<p>Dire que je n&rsquo;ai jamais utilisé l&rsquo;un de ces moteurs serait me parjurer et il faut reconnaitre qu&rsquo;il y a un côté pratique. Difficile une fois avoir gouter à la simplicité pour ne pas l&rsquo;utiliser à tout va pour tout et rien. C&rsquo;est là pour moi le piège de la pauvreté intellectuelle. Comme toutes les bonnes choses il faut savoir ne pas en abuser.</p>



<p>En dehors de l&rsquo;aspect social et sociétal qui me préoccupe tant, se pose la question des données saisies dans le moteur de recherche ou plutôt de prompt.</p>



<ul class="wp-block-list">
<li>Que deviennent les données saisies ?</li>



<li>Que deviennent les données retournées ?</li>



<li>Combien de temps sont conservés ces données ?</li>



<li>A qui profitent ces données ?</li>



<li>Qui sur surveillent les données ?</li>
</ul>



<p>Cela fait un bon nombre de question non ? Surtout qu&rsquo;un grand nombre des acteurs de l&rsquo;IA sont aux US, Chine etc avec une législation bien singulière. Qui de nos jours lis encore les CGUs<sup data-fn="b41451ff-b3b4-4f38-bb68-9645125a745a" class="fn"><a href="#b41451ff-b3b4-4f38-bb68-9645125a745a" id="b41451ff-b3b4-4f38-bb68-9645125a745a-link">3</a></sup> (et qui les a déjà lus) ?</p>



<p>C&rsquo;est ainsi que grâce à mon directeur j&rsquo;ai découvert la solution OLLAMA. Solution open-source qui exécute des modèles d&rsquo;intelligence artificielle (aussi appelé LLM<sup data-fn="1aad26f0-eec5-4a0f-8e20-fdd248a35c69" class="fn"><a href="#1aad26f0-eec5-4a0f-8e20-fdd248a35c69" id="1aad26f0-eec5-4a0f-8e20-fdd248a35c69-link">4</a></sup>) localement. Tout de suite, le projet m&rsquo;a séduit et je me suis demandé</p>



<p class="has-text-align-center"><strong>Et pourquoi pas ? </strong></p>



<p>Dans le pire des cas, je mourrai moins c*n ce soir comme dirait un philosophe du cercle familial.</p>



<p>Naturellement, j&rsquo;ai choisi d&rsquo;user de OLLAMA sur ma distribution favorite RockyLinux. L&rsquo;environnement a été préalablement durci.</p>



<p>On se lance dans la théorie puis dans la pratique mes petits Lamas ?</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>
<ul class="wp-block-list">
<li>Rocky Linux 9.x et version ultérieures (pour ma part ça sera du 10.x)</li>



<li>macOS</li>



<li>Windows</li>
</ul>
</li>



<li><strong>Apps :&nbsp;</strong>
<ul class="wp-block-list">
<li>Ollama</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>GPU<sup data-fn="fdf3a5b9-4253-464d-a09e-8fb86b58314e" class="fn"><a href="#fdf3a5b9-4253-464d-a09e-8fb86b58314e" id="fdf3a5b9-4253-464d-a09e-8fb86b58314e-link">5</a></sup></li>



<li>Minimum 4 CPU<sup data-fn="73029218-b1cc-46cd-b970-647ebf9d8979" class="fn"><a href="#73029218-b1cc-46cd-b970-647ebf9d8979" id="73029218-b1cc-46cd-b970-647ebf9d8979-link">6</a></sup></li>



<li>Stockage rapide (SSD<sup data-fn="a37422d2-85b9-4b20-aaed-ed832709d897" class="fn"><a href="#a37422d2-85b9-4b20-aaed-ed832709d897" id="a37422d2-85b9-4b20-aaed-ed832709d897-link">7</a></sup> ou Nvme)</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<p>Je vais essayer d&rsquo;être le moins rassoir possible. Toutefois et encore il est nécessaire d&rsquo;où nous partons pour en être là maintenant avec l&rsquo;IA.</p>



<h3 class="wp-block-heading">Un peu d&rsquo;histoire</h3>



<p>La notion d&rsquo;intelligence artificielle vient de loin dans notre histoire, puisque l&rsquo;homme depuis l&rsquo;antiquité rêve d&rsquo;objets animés intelligents qui pourraient répondre à ces besoins.</p>



<p>Ce qui est fascinant ce trouve dans les différentes cultures à travers les âges. Que ce soit :</p>



<ul class="wp-block-list">
<li>Les <a href="https://fr.wikipedia.org/wiki/H%C3%A9pha%C3%AFstos">automates d&rsquo;Héphaïstos</a> dans la mythologie grecque</li>



<li>La tentation de créé l&rsquo;Homme servi par l&rsquo;alchimie aux moyen âge comme la science Talkim du grand savant islamique <a href="https://fr.wikipedia.org/wiki/Jabir_ibn_Hayyan">Jabir ibn Hayyan</a> (Geber en latin), des <a href="https://fr.wikipedia.org/wiki/Homoncule_(alchimie)">homoculus</a> par le médecin suisse de conviction chrétienne <a href="https://fr.wikipedia.org/wiki/Paracelse">Paracelse</a> qui s&rsquo;inspirera des travaux de <a href="https://fr.wikipedia.org/wiki/Zosime_de_Panopolis">Zosime de Panopolis</a> sans oublier l&rsquo;un des plus connue de tous ces automates, le Golem d&rsquo;argile présent dans le Talmud du judaïsme, créé par le rabbin Maharal pour protéger la communauté juive de Prague face aux multiples pogroms (j&rsquo;ai d&rsquo;ailleurs eu la possibilité de visiter le cimetière juif de Prague et de comprendre tout cela).</li>



<li>Plus tard, nous retrouverons des œuvres telles que
<ul class="wp-block-list">
<li><a href="https://fr.wikipedia.org/wiki/Les_Aventures_de_Pinocchio">Les Aventures de Pinocchio</a> de <a href="https://fr.wikipedia.org/wiki/Carlo_Collodi">Carlo Collodi</a> avant d&rsquo;être adapté en dessin animé par Disney</li>



<li><a href="https://fr.wikipedia.org/wiki/Frankenstein_ou_le_Prom%C3%A9th%C3%A9e_moderne">Frankenstein</a> de <a href="https://fr.wikipedia.org/wiki/Mary_Shelley">Mary Shelley</a></li>



<li>Ou encore <a href="https://fr.wikipedia.org/wiki/Deep_Blue">Deep Blue</a> qui viendra à bout de <a href="https://fr.wikipedia.org/wiki/Garry_Kasparov">Garry Kasparov</a> aux échecs.</li>
</ul>
</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Bref, tout cela pour dire que depuis l&rsquo;origine de l&rsquo;humanité, nous Homme recherchons à créer des objets autonomes et intelligents à notre services. Pour de multiples raisons, défensives, assistanat etc. Le plus troublant, cette pensée de création pourtant contre religieuse et présente dans toutes les cultures et religions portées par ces savants et lettrés (et ça, voyez-vous je trouve ça beau, très beau).</td><td class="has-text-align-center" data-align="center"><img decoding="async" width="650" height="867" class="wp-image-3481" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-scaled.jpg" alt="Kafka &amp; Prague Golem" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-scaled.jpg 1920w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-225x300.jpg 225w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-768x1024.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-1152x1536.jpg 1152w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-1536x2048.jpg 1536w" sizes="(max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p></p>



<p>Enfin, il faudra attendre le XXème siècle et l&rsquo;arrivée des premiers ordinateur programmable pour que l&rsquo;IA se développe pleinement.</p>



<p>C&rsquo;est le pionnier et j&rsquo;oserai dire le père de l&rsquo;IA John McCarthy qui ouvre la voie, notamment par cette citation :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>C&rsquo;est la science et l&rsquo;ingénierie de la fabrication de machines intelligentes, en particulier de programmes informatiques intelligents. Elle est liée à la tâche similaire qui consiste à utiliser des ordinateurs pour comprendre l&rsquo;intelligence humaine, mais l&rsquo;IA ne doit pas se limiter aux méthodes qui sont biologiquement observables.</em></p>
<cite>John McCarthy &#8211; <a href="https://fr.wikipedia.org/wiki/Intelligence_artificielle">Wikipédia</a></cite></blockquote>



<p>Le sujet étant réellement complexe, il est difficile de concrétiser et de répondre aux attentes des investissements privés et étatiques durant la période 70 à 80. Ce qui vaudra un ralentissement dans la rechercher et la montée en puissance de l&rsquo;IA que nous connaissons ce jour en 2026. Et pourtant les théories et grands principes mathématiques et logiques sont établis et adopté par la DARPA<sup data-fn="551f4327-d659-4f5e-aa79-e901800f9a6f" class="fn"><a href="#551f4327-d659-4f5e-aa79-e901800f9a6f" id="551f4327-d659-4f5e-aa79-e901800f9a6f-link">8</a></sup>. C&rsquo;est ainsi que s&rsquo;affronte deux grands systèmes :</p>



<p class="has-text-align-center"><strong>Le système logiciste <em>VS</em> Le système neuronale</strong></p>



<p>C&rsquo;est en 2010, que l&rsquo;IA fait réellement son entrée dans nos vies du quotidien et dans les différents secteurs d&rsquo;activités.</p>



<p>Pour entrer davantage dans le détail je vous invite à lire la page wikipédia (cf les sources). J&rsquo;ai promis de faire court. 🙂</p>



<h3 class="wp-block-heading">Les modèles d&rsquo;IA</h3>



<p>Les modèles d&rsquo;IA, c&rsquo;est un peu comme un oignon, il y plusieurs couches.</p>



<p>Déjà il est important de dissocier le Machine Learning du Deep Learning.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_904b9a-45 kt-accordion-has-2-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_b2140d-05"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Machine Learning</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner"><div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="954" height="252" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_MLearning.jpg" alt="" class="wp-image-3494" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_MLearning.jpg 954w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_MLearning-300x79.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_MLearning-768x203.jpg 768w" sizes="(max-width: 954px) 100vw, 954px" /></figure>
</div>


<p>Le process pourrait se décrire de la manière suivante :</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">Phase 1 :</span></strong> Identifier les mots clés fournit en entrée les plus pertinents afin de préparer ces derniers à être analysé. Nous parlons généralement de datasets.</li>



<li><strong><span style="text-decoration: underline;">Phase 2 :</span></strong> Choisir le bon modèle ou algorithme qui sera le plus pertinent à être utilisé selon l&rsquo;identification des datasets identifiés et analysés.</li>



<li><strong><span style="text-decoration: underline;">Phase 3 :</span></strong> Construire le modèle d&rsquo;analyse basé sur l&rsquo;algorithme choisie lors de l&rsquo;étape précédente.</li>



<li><strong><span style="text-decoration: underline;">Phase 4 :</span></strong> Jouer le modèle sur un ensemble de jeux de données afin d&rsquo;obtenir plusieurs jeux de données.</li>



<li><strong><span style="text-decoration: underline;">Phase 5 :</span></strong> Utiliser le modèle pour attribuer une note à l&rsquo;ensemble des jeux de données retournés et fournier des patterns pertinents adaptés aux datasets initiaux.</li>
</ul>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_61862a-a3"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Deep Learning</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="944" height="230" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DLearning.jpg" alt="" class="wp-image-3495" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DLearning.jpg 944w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DLearning-300x73.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DLearning-768x187.jpg 768w" sizes="auto, (max-width: 944px) 100vw, 944px" /></figure>
</div>


<p>Le process pourrait se décrire de la manière suivante :</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">Phase 1 :</span></strong> Comprendre le contexte présenté par l&rsquo;utilisateur et décider ou non si le Deep Learning est nécessaire ou non.</li>



<li><strong><span style="text-decoration: underline;">Phase 2 :</span></strong> Identifier les mots clés fournit en entrée les plus pertinents afin de préparer ces derniers à être analysé. Nous parlons généralement de datasets.</li>



<li><span style="text-decoration: underline;"><strong>Phase 3 :</strong></span> Choisir le bon modèle ou algorithme qui sera le plus pertinent à être utilisé selon l&rsquo;identification des datasets identifiés et analysés.</li>



<li><strong><span style="text-decoration: underline;">Phase 4 :</span></strong> Jouer le modèle sur un ensemble de jeux de données afin d&rsquo;obtenir plusieurs jeux de données.</li>



<li><strong><span style="text-decoration: underline;">Phase 5 :</span></strong> Compare le modèle ainsi que ces performances face aux données existantes identifiés ou non identifiées avec notre contexte initial.</li>
</ul>
</div></div></div>
</div></div></div>



<p></p>



<p>Pour le comprendre au mieux, il convient de reprendre le <strong><em>Diagramm de Venn</em></strong> pour comprendre comment s&rsquo;imbriquent ces différentes notions d&rsquo;apprentissage.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><strong>IA :</strong> a pour objectif de comprendre le langage humain, de réaliser les analyses prédictives offrir une IHM<sup data-fn="7ddca2cc-8395-4bb3-9a48-65ef2cbdd525" class="fn"><a href="#7ddca2cc-8395-4bb3-9a48-65ef2cbdd525" id="7ddca2cc-8395-4bb3-9a48-65ef2cbdd525-link">9</a></sup> et AGI<sup data-fn="3da01144-9884-4e50-80b3-cb720fe5d120" class="fn"><a href="#3da01144-9884-4e50-80b3-cb720fe5d120" id="3da01144-9884-4e50-80b3-cb720fe5d120-link">10</a></sup>.<br><br><strong>Machine Learning :</strong> se compose de l&rsquo;apprentissage automatique, la clustérisassions, les arbres décisionnels, le SVM<sup data-fn="6b6187e7-bf8d-4671-888c-ddabe2812f2a" class="fn"><a href="#6b6187e7-bf8d-4671-888c-ddabe2812f2a" id="6b6187e7-bf8d-4671-888c-ddabe2812f2a-link">11</a></sup>, LLM et NLP<sup data-fn="2ccacfdc-8014-4064-9420-0e51ef9e2778" class="fn"><a href="#2ccacfdc-8014-4064-9420-0e51ef9e2778" id="2ccacfdc-8014-4064-9420-0e51ef9e2778-link">12</a></sup>.<br><br><strong>Réseaux Neuronales :</strong> comprend les RAG<sup data-fn="4e84b708-3cbf-4c9d-af94-e19d2cd9d82e" class="fn"><a href="#4e84b708-3cbf-4c9d-af94-e19d2cd9d82e" id="4e84b708-3cbf-4c9d-af94-e19d2cd9d82e-link">13</a></sup> / Finetuning ainsi que les Feed Forward.<br><br><strong>Deep Learning</strong></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="494" class="wp-image-3496" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DiagrammVenn.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DiagrammVenn.jpg 598w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DiagrammVenn-300x269.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<p>Bien que rapide dans la présentation, de ce qu&rsquo;est l&rsquo;IA, je pense que nous avons suffisamment d&rsquo;éléments pour aborder les différents types d&rsquo;IA. </p>



<p><em>Toutefois, je suis loin d&rsquo;être spécialiste de l&rsquo;IA et mes connaissances théoriques remontent de mes cours de 2014 et de ce que j&rsquo;ai pu lire et apprendre depuis ces dernières semaines. Je vous invite donc à lire plus en détails son fonctionnement en profondeur.</em></p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_aa8e5f-c2 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_c6b1c8-9f"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Intelligence Artificielle Réactive</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>C&rsquo;est la forme la plus élémentaire d&rsquo;IA qui se base sur des situations spécifiques limitées par des règles prédéfinies. Le traitement des entrées sont réalisées en temps réel sans prendre en compte les retours précédents afin de ne pas influer sur la décision qui va être retournée.</p>



<p>De par sa simplicité, ce type d&rsquo;IA est efficace dans certains contextes ou rapidité et spontanéité sont nécessaires dans un traitement en temps réel. Et c&rsquo;est ainsi que l&rsquo;on retrouve ce type d&rsquo;IA dans les chatbots.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_67b18a-3d"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Intelligence Artificielle Limitée à la Mémoire</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Dans un sens le grand frère de l&rsquo;IA Réactive, la présence de mémoire permet à l&rsquo;IA d&rsquo;apprendre et d&rsquo;évoluer en prenant compte les retours des entrées précédentes. Pour chaque recherche, le système d&rsquo;IA va consulter sa base de connaissance afin de fournir une réponse la plus fiable possible.</p>



<p>Automatiquement, la qualité de la réponse ainsi que sa fiabilité dépendront du nombre d&rsquo;entrée que cette dernière aura en mémoire et va avoir un certain mal à répondre en temps réel. Nous retrouvons principalement son usage sur les sites e-commerces pour proposer des produits similaires à ceux consultés ou consommés par l&rsquo;utilisateur.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3440_037cc9-55"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Intelligence Artificielle Auto Consciente</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Ce type d&rsquo;IA consiste en théorie à insuffler un état de conscience à la machine afin que cette dernière soit une entité à part entière capable de comprendre son propre état.</p>



<p>Naturellement, aujourd&rsquo;hui toujours en recherche, ce type d&rsquo;IA permettrait une autonomie totale de l&rsquo;IA car cela permettrait des facultés d&rsquo;apprentissages, d&rsquo;adaptations et de réflexions incroyable dans les choix décisionnels.</p>



<p>Se pose alors dans les recherches un questionnement éthique et nécessite encore de percer sur le plan humain le fonctionnement de la conscience qui nous habite. </p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3440_690749-ce"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Intelligence Artificielle La théorie de l&rsquo;esprit</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Le dernier type, c&rsquo;est vivre dans le turfu. Cela serait d&rsquo;avoir une IA dotée d&rsquo;un esprit. Soit d&rsquo;avoir une IA capable de comprendre et d&rsquo;adapter les émotions, intentions et croyances d&rsquo;autres IA comme de notre environnement. Pour faire simple, une machine qui serait un humain ++.</p>



<p>Le questionnement sur l&rsquo;éthique devient plus important au vu des implications vie privée, consentement etc. Manquerait plus que de finir comme <a href="https://www.youtube.com/watch?v=I8oRqko7OG4">Sarah Connor</a>&#8230; </p>
</div></div></div>
</div></div></div>



<p></p>



<p>Bon allez ça sera tout pour l&rsquo;instant. Regardons de plus prêt Ollama. 🙂</p>



<h3 class="wp-block-heading">Architecture et Best-Pratices</h3>



<p>Ollama étant cross plateform, j&rsquo;ai pris le parti de déployer ce dernier sous RHEL. Donc le guide va suivre dans ce sens. Ce choix est motivé par mes soins pour garder une meilleure maitrise des ressources qui vont être consommées par le système. Pour MacOS, je ne me prononce pas car je n&rsquo;utilise pas ce dernier. Sous Windows, je voyais déjà mon petite dernier faire du rodéo sur l&rsquo;hyperviseur qui gambade dans le couloir au premier prompt soumis&#8230; 🙂</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Comme énoncé ci-haut, il faut au minimum en ressource :<br>* 4 vCPUs<br>* 16 Gio de RAM<br>* 2 Gio de GPU<br>* Stockage Rapide<br><br>Malheureusement pour moi, je n&rsquo;ai pas les ressources nécessaires, mais cela ne m&#8217;empêchera pas d&rsquo;aller au bout des choses.<br><br>Je propose toutefois de dissocier les modèles et une partie de l&rsquo;architecture OLLAMA sur un disque dédié pour des raisons de performances lors de la soumissions des prompts et ne pas saturer le disque système.<br><br>L&rsquo;accès à l&rsquo;application se fera par des call API<sup data-fn="75955ef0-37da-444b-ba62-3eced558a61a" class="fn"><a href="#75955ef0-37da-444b-ba62-3eced558a61a" id="75955ef0-37da-444b-ba62-3eced558a61a-link">14</a></sup> sur le port <strong>11434/tcp</strong>.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="245" class="wp-image-3503" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_003_arch_bp.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_003_arch_bp.jpg 646w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_003_arch_bp-300x134.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<p>Si nous voulions aller plus loin il serait bien de dédié un disque pour les logs et ainsi améliorer les performances.</p>



<p>Niveau sécurité, je suis resté sur mon durcissement classique et divulgâchage alerte ça fonctionne (Jacques TOUBON, le retour aurait été fier de moi pour ce coup-là !).</p>



<p>Je ne vois plus qu&rsquo;un dernier point à aborder et nous pouvons passer à la pratique. Oui comme toute bonne chose, il faut faire durer le plaisir. <strong><em>#sendkisses</em></strong></p>



<h3 class="wp-block-heading">Conséquences de l&rsquo;IA</h3>



<p>L&rsquo;IA est à ce jour (2025) adopté par environ 2/3 de la population mondiale que ce soit à des fins professionnels ou personnels dont environ 73% dans le contexte pro. Ainsi, difficile de nier que l&rsquo;usage particulier et bien au-dessus des institutions organisationnelles.</p>



<p>Comme énoncé bien plus tôt dans cette partie, l&rsquo;usage est principalement à destination des centres de services et à destination des utilisateurs (chatbots, service clients) 60%, l&rsquo;automatisation des ventes et marketings 13%, l&rsquo;optimisation des systèmes IT 9%, l&rsquo;aide à la décision entre 5 et 10% et la production de contenu entre 5 et 10% également. Bien que mes chiffres date de 2023-2024.</p>



<p>Dans son usage concrets, l&rsquo;IA est utilisée à 46% pour la recherche d&rsquo;informations, 43% pour la rédaction de textes et 33% pour de l&rsquo;analyse ou traduction.</p>



<p>Les estimations à venir d&rsquo;ici 2030 seraient un usage de l&rsquo;IA par 80 à 85% de la population mondiale. Cette escalade et course n&rsquo;est pas sans conséquence sur le plan économique et disponibilité des ressources en termes de composants électroniques.</p>



<p>Qui dit plus d&rsquo;usage, dit plus de ressource de calcul et donc plus de composants et plus d&rsquo;énergie. Le système peine à suivre. C&rsquo;est ainsi qu&rsquo;en moyenne, l&rsquo;évolution des couts entre 2024 et 2026 (estimé sur le plan mondial) et de :</p>



<ul class="wp-block-list">
<li>RAM (DDR5) : +170 à +250 %</li>



<li>SSD : +60 à +100 %</li>



<li>GPU : +10 à 25 %</li>



<li>CPU : +0% à +10%</li>
</ul>



<p>Cela entraine donc une hausse des offres Cloud et service SaaS/IaaS/PaaS/BaaS et j&rsquo;en passe ainsi que des couts équipements embarquant ce type de composants. Difficile de faire sans IA de nos jours.</p>



<p>Bon c&rsquo;est promis, passe à la pratique, je ferme la parenthèse que je n&rsquo;ai jamais ouverte.</p>



<h2 class="wp-block-heading">Pratique</h2>



<p>Avant de se lancer dans l&rsquo;installation, si je reprends les prérequis énoncés ci-haut, sachez que :</p>



<ul class="wp-block-list">
<li>Je n&rsquo;ai pas de GPU</li>



<li>Je n&rsquo;ai pas de stockage rapide</li>



<li>Mon hypervisieur est monoprocesseur</li>
</ul>



<p>Tout pour bien fonctionner en somme 🙂</p>



<h3 class="wp-block-heading">Installation</h3>



<p>L&rsquo;installation va se dérouler en 2 parties. Une partie pour installer Ollama, une partie pour l&rsquo;installation des modèles d&rsquo;intelligence artificielle.</p>



<h4 class="wp-block-heading">Ollama</h4>



<h5 class="wp-block-heading">Installation</h5>



<p>La documentation fournit sur le site est simple et claire. Il suffit alors de télécharger et d&rsquo;exécuter le contenu du script install.sh.</p>



<p>Vérifier en amont que le paquet <strong>zstd</strong> est installé sur notre environnement.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-78e91345c70998de458fa9707149535d"><code><strong>$ sudo dnf install zstd</strong></code></pre>



<p>Si nous rentrons plus en détail, les arguments :<br></p>



<ul class="wp-block-list">
<li><strong>-f</strong> : ignore les redirections en cas de retour autre que le code 200 du protocole HTTP<sup data-fn="6ad53fdd-7b83-46bd-8608-5b89bf94b781" class="fn"><a href="#6ad53fdd-7b83-46bd-8608-5b89bf94b781" id="6ad53fdd-7b83-46bd-8608-5b89bf94b781-link">15</a></sup></li>



<li><strong>-s</strong> : supprime la barre de suppression et rend l&rsquo;exécution de la commande silencieuse</li>



<li><strong>-S</strong> : indique les erreurs</li>



<li><strong>-L</strong> : permet de suivre les redirections HTTP</li>
</ul>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-fdc9c501862a41c5e35dd5d3ba3d3a99"><code><strong>$ sudo curl -fsSL https://ollama.com/install.sh | sh</strong></code></pre>



<figure class="wp-block-table is-style-stripes"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">/!\</mark> Attention : </strong>Il est vivement recommandé en amont avant d&rsquo;exécuter un script téléchargé depuis le net de vérifier son contenu et de lire ce dernier. Question de sécurité. Sinon cela revient encore une fois à s&rsquo;étonner d&rsquo;avoir attrapé <em>une gonorrhée après être allé aux p*tes sans capotes</em>&#8230;<br><br><strong>$ sudo curl -fsSL https://ollama.com/install.sh | cat</strong><br></td></tr></tbody></table></figure>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="262" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1-1024x262.jpg" alt="" class="wp-image-3453" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1-1024x262.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1-300x77.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1-768x197.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1.jpg 1246w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>L&rsquo;installation c&rsquo;est bien passée. Toutefois, le script nous informe qu&rsquo;aucun équipement GPU n&rsquo;a été détecter et donc que les calculs seront effectués par notre CPU. Ce qui va donc être plutôt lent dans mon cas personnel.</p>



<h5 class="wp-block-heading">Service au démarrage</h5>



<p>Nous retrouvons une commande maintenant bien connue dans les environnements RHEL. Ainsi à chaque démarrage de notre système notre daemon ollama va être démarré.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-60892f41106e2af5ff1e267db4089e0f"><code><strong>$ sudo systemctl enable ollama</strong></code></pre>



<h5 class="wp-block-heading">Firewalling</h5>



<p>Encore une fois et comme toujours, il est nécessaire d&rsquo;ouvrir le port <strong>11434/tcp</strong> si nous souhaitons joindre l&rsquo;API depuis l&rsquo;extérieur (comprendre hors localhost).</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-87b1a8a000363e2b11cfacb574e43b19"><code><strong>$ sudo firewall-cmd --permanent --add-port=11434/tcp</strong><strong>
$ sudo firewall-cmd --reload</strong></code></pre>



<p>On est d&rsquo;accord que si nous souhaiterions mieux faire en termes de sécurité, il serait plus intelligent de créer la policy suivante :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7cd1a4145b8e795efe3d5c6a206c573b"><code><strong>$ sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.127.50.0/24" port port="11434" protocol="tcp" accept'
$ sudo firewall-cmd --reload</strong></code></pre>



<p>Ayant un UTM<sup data-fn="ff1afc50-05de-4bce-91e3-563ae4b9fe9f" class="fn"><a href="#ff1afc50-05de-4bce-91e3-563ae4b9fe9f" id="ff1afc50-05de-4bce-91e3-563ae4b9fe9f-link">16</a></sup> en amont, je me permets donc de me contenter de la première solution.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="908" height="399" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_FirewallAPI_2.jpg" alt="" class="wp-image-3455" style="aspect-ratio:2.275705027150114;width:587px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_FirewallAPI_2.jpg 908w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_FirewallAPI_2-300x132.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_FirewallAPI_2-768x337.jpg 768w" sizes="auto, (max-width: 908px) 100vw, 908px" /></figure>
</div>


<h5 class="wp-block-heading">HTTP ou HTTPS ?</h5>



<p class="has-text-align-center"><strong>Un doute m&rsquo;habite&#8230; Le port 11434/tcp, ça ne serait pas du http ?</strong></p>



<p>Bien vu l&rsquo;aveugle ! Effectivement et niveau sécurité c&rsquo;est pas super, il faudrait mieux user du protocole https. Pour ça, j&rsquo;ai une solution passons par un reverse proxy 🙂</p>



<p>Je suis partagé quant à la rédaction de cette sous partie. Oui il est important de sécuriser l’accès à l’interface Web, mais j’ai peur d’être hors sujet et d’alourdir l’article. Mais d’un autre côté, je ne veux pas non plus bâcler la chose… Encore un pu**n de choix cornélien…</p>



<p>Bref, je vais faire au plus simple et si besoin écrirai un billet sur Nginx.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_5739eb-e1 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_2c1931-a6"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Installation</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>L’installation et activation du service, je passe mon tour.</p>



<p></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-2d96c8f801e10588d862a20dfe6ac0cb"><code><strong>$ sudo dnf install nginx
$ sudo systemctl enable nginx
$ sudo systemctl start nginx</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="939" height="450" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0.jpg" alt="" class="wp-image-3573" style="aspect-ratio:2.086739469578783;width:317px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0-300x144.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0-768x368.jpg 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="938" height="83" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1.jpg" alt="" class="wp-image-3572" style="aspect-ratio:11.302070130967468;width:339px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1-300x27.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1-768x68.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_a9caf1-43"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Certificats</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Là encore une fois je rencontre un petit problème. Je n’ai pas de certificat public que je pourrais utiliser, ma topologie réseau ne me permet pas d’utiliser un certificat Let’s Encrypt et sans vouloir spoiler je n’ai pas envie de me prendre la tête. Donc ça va finir avec un bon vieux certificat autosigné 🙂</p>



<p>La génération n’est pas bien compliquée et si besoin, j’ai déjà rédigé&nbsp;<a href="https://erwanguillemard.com/linux-certificats/">un article</a>&nbsp;sur le sujet.</p>



<p>Créons le répertoire qui va contenir nos éléments de sécurité :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-16d3dda1539c5bf2a831ca2965909c37"><code><strong>$ sudo mkdir -p /etc/nginx/ssl</strong></code></pre>



<p>Générons notre certificat :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d734dc3e16717cda0e24e481dbf0df76"><code><strong>$ sudo openssl req req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/nginx/ssl/ollama.key \
-out /etc/nginx/ssl/ollama.crt</strong></code></pre>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3440_01a91a-c2"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Configuration</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Créons et éditons notre fichier de configuration. Je prendrai le temps d’expliquer l’intégralité du fichier de configuration.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-9bc0a5fa80b33bf1ad1ef6a3d6a46601"><code><strong>$ sudo vim /etc/nginx/conf.d/ollama.conf</strong></code></pre>



<pre class="wp-block-code"><code>#server {
#    listen 80;
#    server_name 10.227.250.11;
#
#    return 301 https://$host$request_uri;
#}

server {
    listen 11444 ssl;
    http2 on;
    server_name 10.227.250.11;

    ssl_certificate /etc/nginx/ssl/ollama.crt;
    ssl_certificate_key /etc/nginx/ssl/ollama.key;

    # TLS sécurisé
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;

    # sécurité headers
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    # taille upload
    client_max_body_size 100M;

    # compression
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml;

    location / {

        proxy_pass http://10.227.250.11:11434;

        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_buffering off;

        proxy_read_timeout 3600;
        proxy_send_timeout 3600;
    }
}</code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>La première section permet de réaliser la redirection du protocole HTTP vers HTTPS de manière permanente. Ainsi si je contacte l’url http://10.227.250.11, je serais automatiquement redirigé vers https://10.227.254.11.<br>Toutefois, la section est commentée car elle entre en conflit avec une autre configuration d&rsquo;un billet à venir 😉</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="324" height="148" class="wp-image-3737" style="width: 324px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_0.jpg 349w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_0-300x137.jpg 300w" sizes="auto, (max-width: 324px) 100vw, 324px" /></td></tr><tr><td>Le second bloc indique que nous écoutons sur le port 11444 sur l’interface 10.227.250.11. L’emplacement des fichiers contenant la clé privée ainsi que le certificat sont spécifiés pour activer la couche de sécurité (j’ai l’impression d’enfoncer des portes ouvertes…). J’indique qu’elles sont les versions des protocoles TLS<sup><a href="https://erwanguillemard.com/?p=3520&amp;preview=true#1a3ccfdd-7fad-428c-9f9a-15401188579d">17</a></sup>&nbsp;autorisées et laisse le serveur choisir le chiffrement le plus sûr.<br>Côté en-tête, j’ai repris les suggestions de sécurité implémentée pour ITOP. Soit la restriction de mettre le site en iframe externe, de restreindre le navigateur à deviner le tye MIME qui est utilisé et surtout d’activer la protection anti-cross-site scripting. Niveau upload, j’ai vu large et j’ai autorisé le téléversement de fichier de 100 Mio.<br>Côté performance, j’ai activé la compression des flux pour optimiser un peu les performances réseaux.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="457" class="wp-image-3738" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_1.jpg 663w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_1-300x249.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr><tr><td>Le troisième bloc concerne la partie Reverse Proxy.<br>Toutes les requêtes qui sont envoyées sur https://10.227.250.11 sont redirigées vers le port 11434.<br>Concernant les en-têtes il est nécessaire d’utiliser les websockets car seront transmis l’ip du client, le protocole utilisé et le NDD<sup><a href="https://erwanguillemard.com/?p=3520&amp;preview=true#6f19f21f-54c7-433f-8a76-3c3d830f4eda">18</a></sup>&nbsp;ou l’IP demandé.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="368" class="wp-image-3739" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_2.jpg 533w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_2-300x201.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<p>Une fois la configuration faite, il est important de réaliser un petit contrôle de notre petit fichier afin de s’assurer que ce dernier ne comporte pas d’erreur.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-c0a5cd62be5632132cc71ae703da0130"><code><strong>$ sudo nginx -t 
$ sudo systemctl restart nginx</strong></code></pre>



<p>Tiens une erreur 🙂 Regardons ça dans la partie suivante&#8230;</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3440_aa7045-77"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Sécurité</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Nous souhaitons toujours publier notre interface web en HTTPS. Donc il va falloir jouer avec nos UTMs !</p>



<p>Sur le plan interne, autorisons nos flux https :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-82f39b4be835c163c84ee4674bd33142"><code><strong>$ sudo firewall-cmd --permanent --add-port=11444/tcp
$ sudo firewall-cmd --reload</strong></code></pre>



<p>Toutefois lors de la relance du service on se tape une bonne grosse erreur. C&rsquo;est lié au SELinux. Nginx n&rsquo;est pas autorisé par le SELinux a écouter sur le port 11444. Donc il faut l&rsquo;autoriser.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7d61726b3583615abe3b3620597d056f"><code><strong>#Install semanage
$ sudo dnf install policycoreutils-python-utils

#Ajout du port comme autorisé à l'écoute
$ sudo semanage port -a -t http_port_t -p tcp 11444</strong>

<strong>#Relance du service nginx</strong>
<strong>$ sudo systemctl restart nginx</strong></code></pre>



<p>Normalement nous ne devons plus avoir d&rsquo;erreur. Toutefois si nous essayons de joindre l&rsquo;url <strong>https://egapl-ollama-01:11444</strong> nous devons avoir un jolie 502 Bad Gateway dans notre navigateur 😀</p>



<p>Ca vous fait la b**e hein ? Je vous rassure je me suis pris la même rouste. J’ai oublié d’autoriser le contexte de mon SELinux pour autoriser les services http à accéder aux réseaux 😀</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-a7c965cb0ad20254d3dd67e1b9cd6ce2"><code><strong>$ sudo setsebool -P httpd_can_network_connect 1</strong></code></pre>



<p>Un petit F5 et hop c’est tout bon &lt;3</p>



<p></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Normalement avec toutes nos actions, nous devons joindre notre interface web depuis un navigateur de manière sécurisée (hormis l’erreur liée à notre certificat autosigné).</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="257" class="wp-image-3740" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3.jpg 1098w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3-300x140.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3-1024x478.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3-768x359.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<h5 class="wp-block-heading">Emplacement des modèles</h5>



<p>Lors de ce benchmark, j&rsquo;ai été confronté à un problème d&rsquo;espace disque lié aux modèles. Effectivement, les modèles sont au minimum supérieur à 3 Gio. Et c&rsquo;est là que c&rsquo;est le drame car « pouf » je me tape un message d&rsquo;erreur&#8230;</p>



<p>La solution est donc de déplacer le répertoire de modèle vers un autre disque. J&rsquo;ai vu large, j&rsquo;ai provisionné 100 Gio. Je pars du principe que le disque est monté et formaté.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-36428a3107c846deceb061ab8803f4e9"><code><strong>$ sudo chown -R ollama:ollama /mnt/ollama</strong></code></pre>



<p>Le changement de l&#8217;emplacement du répertoire du modèle va se faire par surcharge du service qui démarre Ollama. Naturellement, on ne modifie pas le service de base car les changements ne seront pas persistants. D&rsquo;où la surcharge&#8230;</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7441047b0f606bc5e946cd75efce1071"><code><strong>$ sudo mkdir /etc/systemd/system/ollama.service.d
$ sudo vim /etc/systemd/system/ollama.service.d/override.conf</strong></code></pre>



<pre class="wp-block-code"><code><strong>&#91;Service]
Environment="OLLAMA_DEBUG=1"
Environment="OLLAMA_MODELS=/mnt/ollama/ollama-models"
Environment="OLLAMA_HOST=0.0.0.0"</strong>
</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="590" height="102" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_2.jpg" alt="" class="wp-image-3456" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_2.jpg 590w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_2-300x52.jpg 300w" sizes="auto, (max-width: 590px) 100vw, 590px" /></figure>
</div>


<p>Notons que le mode <strong>Debug</strong> est actif et que le chemin de nos modèles est défini. J&rsquo;ai également défini la variable <strong>OLLAMA_HOST</strong> qui va nous permettre de joindre notre application depuis une source externe à notre machine.</p>



<p>Il convient alors de recharger, forcer le gestionnaire de services à recharger l&rsquo;ensemble de ses configurations. Dans un second temps nous redémarrerons le daemon ollama afin de prendre en considération les changements présents dans notre fichier de surcharge. Par mesure de sécurité (car la confiance n&rsquo;exclut pas le contrôle) j&rsquo;aime à vérifier que le service est bien actif.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-e4dd388e47a00051adc0be7943572985"><code><strong>$ sudo systemctl daemon-reload
$ sudo systemctl restart ollama
$ sudo systemctl status ollama
$ sudo ls -al /mnt/ollama/ollama-models/</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="438" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4-1024x438.jpg" alt="" class="wp-image-3457" style="aspect-ratio:2.3379521324455643;width:566px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4-1024x438.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4-300x128.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4-768x328.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4.jpg 1128w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Dans les sources, nous pouvons constater la présence de nos variables surcharger. Néanmoins nous pouvons afficher le contenu de notre répertoire cible pour les modèles afin de vérifier que l&rsquo;arborescence est bien présente.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="654" height="130" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_3.jpg" alt="" class="wp-image-3458" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_3.jpg 654w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_3-300x60.jpg 300w" sizes="auto, (max-width: 654px) 100vw, 654px" /></figure>
</div>


<h4 class="wp-block-heading">Installer des modèles</h4>



<p>J&rsquo;ai fait le parti car c&rsquo;est « un peu » l&rsquo;objectif de base de ce billet d&rsquo;avoir des modèles locaux qui vont être utilisés. Je ne souhaite pas utiliser des connexions avec des sources externes afin de garder un contrôle sur mes recherches et usage.</p>



<p>J&rsquo;ai fait le choix d&rsquo;étudier 4 modèles LLM :</p>



<ul class="wp-block-list">
<li>Llama3</li>



<li>Qwen</li>



<li>Mistral</li>



<li>DeepSeek-Coder</li>
</ul>



<p>Je propose dans un premier temps de faire un comparatif de ces modèles.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Critères</strong></td><td class="has-text-align-center" data-align="center"><strong>Llama 3</strong></td><td class="has-text-align-center" data-align="center"><strong>Qwen</strong></td><td class="has-text-align-center" data-align="center"><strong>Mistral</strong></td><td class="has-text-align-center" data-align="center"><strong>DeepSeek-Coder</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Editeur</strong></td><td class="has-text-align-center" data-align="center">Meta</td><td class="has-text-align-center" data-align="center">Alibaba</td><td class="has-text-align-center" data-align="center">Mistral AI</td><td class="has-text-align-center" data-align="center">DeepSeek</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Type</strong></td><td class="has-text-align-center" data-align="center">Généraliste</td><td class="has-text-align-center" data-align="center">Généraliste</td><td class="has-text-align-center" data-align="center">Généraliste</td><td class="has-text-align-center" data-align="center">Spé code</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Usage</strong></td><td class="has-text-align-center" data-align="center">Populaire</td><td class="has-text-align-center" data-align="center">Bon</td><td class="has-text-align-center" data-align="center">Rapide</td><td class="has-text-align-center" data-align="center">IDE / Dev</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Licence</strong></td><td class="has-text-align-center" data-align="center">Llama Community Licence</td><td class="has-text-align-center" data-align="center">Apache 2.0</td><td class="has-text-align-center" data-align="center">Apache 2.0</td><td class="has-text-align-center" data-align="center">Licence DeepSeek</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Dataset</strong></td><td class="has-text-align-center" data-align="center">Texte/Code/Web</td><td class="has-text-align-center" data-align="center">Multilingue web</td><td class="has-text-align-center" data-align="center">Web + Données filtrées</td><td class="has-text-align-center" data-align="center">~ 90% de code</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Avantages</strong></td><td class="has-text-align-center" data-align="center">Raisonnement et coding</td><td class="has-text-align-center" data-align="center">Multilingue et contextuel</td><td class="has-text-align-center" data-align="center">Rapide et faible consommateur de ressources</td><td class="has-text-align-center" data-align="center">Bon pour du code</td></tr></tbody></table></figure>



<p></p>



<p>Avec ce tableau, je pense que nous avons un bon récapitulatif. Toutefois et pour les curieux il existe une centaine de modèles compatible avec Ollama (<a href="https://ollama.com/library">Lien</a>). J&rsquo;ai fait mon choix, à vous de faire le vôtre. Vous êtes des grands garçons et des grandes filles hein ? <strong>#bisous</strong></p>



<p>L&rsquo;installation pour les modèles choisies, suivent tous la même logique. Pas de quoi épiloguer pendant 107 ans&#8230;.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_be8f6d-58 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_b83fad-d4"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Llama3</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-aedd1dbc85193c1613782e53b2c9aa59"><code><strong>$ sudo ollama pull llama3</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="131" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-1024x131.jpg" alt="" class="wp-image-3463" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-1024x131.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-300x38.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-768x98.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-1536x196.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2.jpg 1628w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_6c3ae4-79"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Qwen</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7168c5d58178d30c4ae7c3365a17f021"><code><strong>$ sudo ollama pull qwen</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="682" height="1024" src="https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-682x1024.jpg" alt="" class="wp-image-1498" style="aspect-ratio:0.666023595755732;width:189px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-682x1024.jpg 682w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-200x300.jpg 200w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-768x1152.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-1024x1536.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-1365x2048.jpg 1365w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-scaled.jpg 1706w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3440_a52c29-5b"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Mistral</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-0616d88d832c9cd4c70a69e1b69bb399"><code><strong>$ sudo ollama pull mistral</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="134" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-1024x134.jpg" alt="" class="wp-image-3464" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-1024x134.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-300x39.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-768x100.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-1536x200.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0.jpg 1626w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3440_b7432f-bf"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>DeepSeek-Coder</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-8e5f43649767beaca209d6420f5b9c1d"><code><strong>$ sudo ollama pull deepseek-coder:6.7b</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="662" height="208" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_024_deepseeker-67b_0.jpg" alt="" class="wp-image-3465" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_024_deepseeker-67b_0.jpg 662w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_024_deepseeker-67b_0-300x94.jpg 300w" sizes="auto, (max-width: 662px) 100vw, 662px" /></figure>
</div></div></div></div>
</div></div></div>



<p></p>



<p>Pour voir l&rsquo;ensemble des modèles il est possible de lister ces derniers grâce à la commande suivante :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-a54c69346022b88f8f0ca96534eb976b"><code><strong>$ sudo ollama list</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="701" height="107" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_ListModel_4.jpg" alt="" class="wp-image-3466" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_ListModel_4.jpg 701w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_ListModel_4-300x46.jpg 300w" sizes="auto, (max-width: 701px) 100vw, 701px" /></figure>
</div>


<h3 class="wp-block-heading">Démarrage de Ollama</h3>



<p>Maintenant que tout est fonctionnel, démarrons Ollama et c&rsquo;est parti pour un périple des possibles comme <a href="https://fr.wikipedia.org/wiki/Sept_Ans_d%27aventures_au_Tibet#:~:text=L'alpiniste%2C%20explorateur%20et%20%C3%A9crivain,la%20souverainet%C3%A9%20de%20la%20Chine.">Heinrich Harrer à l&rsquo;assaut du Nanga Parbat</a> (l&rsquo;élévation n&rsquo;étant pas celle que l&rsquo;on croit 🙂 ).</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="768" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years-1024x768.jpg" alt="" class="wp-image-3468" style="width:411px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years-1024x768.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years-300x225.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years-768x576.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-fecbb2e3da5b233b288694433aba6622"><code><strong>$ ollama</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Dans le menu qui s&rsquo;offre à nous, la première option permet de démarrer, lancer un de nos modèles localement.<br><br>Toutefois, en dessous de cette première option de navigation, nous retrouvons la possibilité d&rsquo;établir des connexions externes vers des moteurs en ligne tel que :<br><br>* Claude Code<br>* Codex<br>* OpenClaw<br>* Droid<br>* Pi<br>* Cline<br><br>Si vous possédez un compte, vous pouvez réaliser la jonction, mais alors à quoi bon avoir un moteur d&rsquo;IA interne ?</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="650" height="649" class="wp-image-3467" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_011_Run_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_011_Run_2.jpg 612w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_011_Run_2-300x300.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_011_Run_2-150x150.jpg 150w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p></p>



<p>Si nous cliquons sur le premier choix, il nous est alors demandé de choisir un modèle. Il est possible de télécharger un modèle directement depuis ce menu ou de choisir un modèle précédemment installé tout en bas de cette interface.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="821" height="279" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_021_model_0.jpg" alt="" class="wp-image-3469" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_021_model_0.jpg 821w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_021_model_0-300x102.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_021_model_0-768x261.jpg 768w" sizes="auto, (max-width: 821px) 100vw, 821px" /></figure>
</div>


<h2 class="wp-block-heading">Tests</h2>



<p>Et si on se lançais un petit benchmark de nos 4 modèles pour voir le fonctionnement ? 🙂</p>



<p>Amusons-nous tel un <a href="https://www.youtube.com/watch?v=vxx-ZQBHXIA">lamastico</a> &lt;3</p>



<p>Pour le test, j&rsquo;ai décidé de partir sur quelque chose de simple et ISO sinon cela ne sert strictement à rien.</p>



<p>La question sera : </p>



<p class="has-text-align-center"><strong>Peux-tu évaluer et me proposer une version plus robuste de cette fonction powershell s&rsquo;il te plait ? [Suivie d&rsquo;une petite fonction maison qui peut être amélioré]</strong></p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_c4efb1-bc kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_c9a31d-08"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Llama</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="930" class="wp-image-3479" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_prompt_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_prompt_1.jpg 639w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_prompt_1-178x300.jpg 178w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_prompt_1-606x1024.jpg 606w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="93" class="wp-image-3478" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_performance_0.jpg 895w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_performance_0-300x51.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_performance_0-768x130.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_e891f6-13"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Qwen</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="1314" class="wp-image-3477" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_1.jpg 636w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_1-126x300.jpg 126w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_1-428x1024.jpg 428w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="92" class="wp-image-3476" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_0.jpg 894w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_0-300x50.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_0-768x128.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p>J&rsquo;ai du tronquer la partie de la réponse en anglais car cela aurait pris énormément d&rsquo;espace. Toutefois la réponse retournée est plus que satisfaisante pour celui qui sait parler la langue de Shakespeare</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3440_3d6aef-62"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Mistral</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="643" class="wp-image-3473" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1.jpg 973w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1-257x300.jpg 257w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1-876x1024.jpg 876w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1-768x898.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="94" class="wp-image-3474" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_0.jpg 905w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_0-300x51.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_0-768x132.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3440_8f5a74-34"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>DeepSeek-Coder</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="969" class="wp-image-3471" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_1.jpg 752w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_1-170x300.jpg 170w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_1-581x1024.jpg 581w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="96" class="wp-image-3472" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_0.jpg 901w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_0-300x53.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_0-768x135.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<p></p>



<p>Je pense que cela est évident en termes de conclusions. Pour 1 prompt identique, nous avons quartes réponses différentes et un point commun. Si certains modèles mettent plus de temps de réponse il est indéniablement contestable que ça chauffe niveau calcul. Dans certains cas, j&rsquo;aime même du SWAP ! Bref, côté consommation électrique, ça consomme&#8230; Mais bon je m&rsquo;y attendais ce n&rsquo;est pas <a href="https://www.youtube.com/watch?v=oY_paPRS3p8">la première fois que je fais des étincelles avec ma b*te</a>&#8230;</p>



<p>Plus sérieusement, je sais quitte à me répéter ou pas ce que je dois faire pour améliorer ma fonction. Et je suis un peu déçu du résultat. Néanmoins en modifiant légèrement le prompt, en précisant :</p>



<p class="has-text-align-center"><strong>Peux-tu évaluer et me proposer une version plus robuste, sécurisé de cette fonction powershell s&rsquo;il te plait comme si tu étais un développeur sénior avec un regard plus critique et sévère ? [Suivie d&rsquo;une petite fonction maison qui peut être amélioré]</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Résultat Prompt initial</strong><br>(qwen)</td><td class="has-text-align-center" data-align="center"><strong>Résultat Prompt plus précis</strong><br>(qwen)</td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="519" class="wp-image-3511" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_2.jpg 935w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_2-300x283.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_2-768x724.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="579" class="wp-image-3512" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_3.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_3.jpg 839w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_3-285x300.jpg 285w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_3-768x808.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<p class="has-text-align-center has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-ff0d0b786a66ea48aaeb04a91218bde4"><mark style="background-color:rgba(0, 0, 0, 0);color:#fd0000" class="has-inline-color"><strong>/!\</strong></mark> <strong>Attention :</strong> J&rsquo;ai volontairement gardé que la suggestion de la fonction et non le blabla d&rsquo;en-tête qui explique tout ce qui va être appliqué.</p>



<p>Encore une fois pas de magie, il suffit de bien rédiger son prompt et là j&rsquo;obtiens un retour plus précis à mes attentes.</p>



<p>Si je résume la situation sur le test à iso périmètre selon le contexte :</p>



<ul class="wp-block-list">
<li>RAM : 8 Go</li>



<li>vCPU : 4</li>



<li>Processeur Physique : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz (Mono)</li>



<li>Contexte : Coding</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Durée des réponses</strong></td><td class="has-text-align-center" data-align="center"><strong>Qualité des réponses</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="365" class="wp-image-3696" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_0.jpg 482w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_0-300x199.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="374" class="wp-image-3695" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_1.jpg 481w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_1-300x204.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p>En conclusion Qwen est de loin celui qui met le plus de temps à délivrer la réponse. Cela s&rsquo;explique par une explication plus poussée ce qui prends un certain temps à l&rsquo;affichage. Cependant la qualité de la réponse retournée est de loin supérieur aux trois autres LLMs.</p>



<p>Il serait intéressant de pousser la comparaison sur un prompt de réflexion pur.</p>



<p>De tous les tests de modèles (du moins sur les quatre déployés) c&rsquo;est qwen qui me convient le mieux. Néanmoins tout dépendra encore une fois du contexte et de ce que je souhaite réaliser avec l&rsquo;IA.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Je suis plutôt satisfait bien que sans répondre aux prérequis il faut savoir s&rsquo;armer de patiente. Dans l&rsquo;ensemble Ollama est une bonne solution mais cette dernière doit être utilisé avec un certain contrôle selon les LLMs que l&rsquo;on pourrait être amené à utiliser. Naturellement le retour de prompt vient de la qualité de celui que l&rsquo;utilisateur aura exprimé.</p>



<p>De ce fait, Ollama ne garantit pas une fiabilité aussi conséquente que les géants du Cloud. Toutefois il permet d&rsquo;assurer la confidentialité, sécurité des données localement et de nos recherches contrairement aux outils en ligne.</p>



<p>Ce qui pourrait toutefois rebuter son usage serait de passer par l&rsquo;interface CLI dans le terminal. Effectivement c&rsquo;est loin d&rsquo;être ergonomique pour un usage quotidien d&rsquo;un utilisateur n&rsquo;ayant pas d&rsquo;expérience dans ce domaine. Mais il existe toutefois des alternatives à cette problématique par des outils intermédiaires qui viennent se placer entre l&rsquo;utilisateur et Ollama. Ce sujet sera abordé dans un prochain billet.</p>



<p class="has-text-align-center"><strong><em>Initialement, je souhaitais aborder le sujet dans ce billet mais cela aurait été trop indigeste. Donc j&rsquo;ai CUT comme on dit dans notre milieu 🙂</em></strong></p>



<p>Ollama fournissant une documentation riche et simple il sera alors possible de jouer avec son API. Vous me connaissez avec le temps, s&rsquo;il y a une documentation, une API&#8230; Que vais-je bien pouvoir faire avec le framework .NET et Powershell ? 🙂 L&rsquo;objectif serait de proposer par exemple un petit client de bureau Windows pour les utilisateurs. Il serait également possible de mettre en place des passerelles d&rsquo;automatisation inter applicatives intelligente comme <strong>L&rsquo;ouverture d&rsquo;un incident sur un event VEEAMOne dans ITOP</strong> ou <strong>une fonction de contrôle de code depuis PowerShell ISE</strong> par exemple.</p>



<p>Cette étude m&rsquo;ouvre un nombre de porte considérable en guise de projet et de sujet d&rsquo;étude et ce malgré les contraintes matérielles. Est-ce que je vais utiliser longtemps la solution, je ne pense honnêtement pas car cette dernière est assez énergivore pour mon petit lab et je ne travaille pas chez EDF ni n&rsquo;habite Versailles. Mais cela peut (pour ne pas dire m&rsquo;a) réconcilié avec l&rsquo;utilisation de l&rsquo;IA. <em>Comme quoi il n&rsquo;y a que les cons qui ne changent pas d&rsquo;avis et nous sommes tous le con d&rsquo;un autre</em>.</p>



<p> Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>J&rsquo;ai cherché votre nom sur Ollama ? Comme ça vous êtes triple champion du monde de descente de Guiness catégorie galopin ? </em></p>



<p><em>Vous devez faire erreur avec une autre personne, je suis un DC10 fantôme sortant d&rsquo;une tempête codéinée. </em></p>



<p><em>Milles excuses M&rsquo;sieur Ollama.</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://www.larousse.fr/dictionnaires/francais/robot/69647">Définition Larousse</a></li>



<li><a href="https://fr.wikipedia.org/wiki/Intelligence_artificielle">Wikipédia : IA</a></li>



<li><a href="https://www.data-bird.co/blog/types-ia">DataBird : Type d&rsquo;IA</a></li>



<li><a href="https://docs.ollama.com/">Ollama : Documentation</a></li>



<li><a href="https://ollama.com/download">Ollama : Téléchargement</a></li>



<li><a href="https://ollama.com/library">Ollama : Bibliothèque de modèle</a></li>



<li><a href="https://docs.openwebui.com/getting-started/quick-start">OpenWebUI : Documentation</a></li>



<li><a href="https://docs.openwebui.com/getting-started/quick-start/connect-a-provider/starting-with-ollama/">OpenWebUI : Intégration Ollama</a></li>



<li><a href="https://telnyx.com/llm-library/deepseek-coder-6-7b-instruct">Comparatif : Modèles performances</a></li>



<li><a href="https://localaimaster.com/blog/best-local-ai-models-2025-complete-guide">Comparatif : Modèles usages</a></li>



<li><a href="https://www.daf-mag.fr/Thematique/gestion-risque-1241/cyber-climat-2123/Breves/ia-usages-confiance-pierre-angulaire-adoption-durable-480929.htm">Usage de l&rsquo;IA : DAFMag</a></li>



<li><a href="https://lehub.bpifrance.fr/les-chiffres-2023-2024-du-marche-de-lia-dans-le-monde/">Répartition de l&rsquo;usage : BPIFrance</a></li>



<li><a href="https://www.lemonde.fr/emploi/article/2025/04/11/53-des-actifs-utilisent-l-ia-dans-leur-vie-professionnelle_6594046_1698637.html">Usage de l&rsquo;IA : LeMonde</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="cfefe833-a7a4-4019-87c1-c684487526cf"><strong>IA :</strong> Intelligence Artificielle <a href="#cfefe833-a7a4-4019-87c1-c684487526cf-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="aadcbef0-7f66-4bcf-bdef-699e3c85609a">L&rsquo;erreur est humaine, persévérer diabolique <a href="#aadcbef0-7f66-4bcf-bdef-699e3c85609a-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="b41451ff-b3b4-4f38-bb68-9645125a745a"><strong>CGU :</strong> Conditions Générales d&rsquo;Utilisations <a href="#b41451ff-b3b4-4f38-bb68-9645125a745a-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="1aad26f0-eec5-4a0f-8e20-fdd248a35c69"><strong>LLM :</strong> Large Language Models  <a href="#1aad26f0-eec5-4a0f-8e20-fdd248a35c69-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="fdf3a5b9-4253-464d-a09e-8fb86b58314e"><strong>GPU :</strong> Graphics Processing Unit  <a href="#fdf3a5b9-4253-464d-a09e-8fb86b58314e-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="73029218-b1cc-46cd-b970-647ebf9d8979"><strong>CPU :</strong> Central Processing Unit <a href="#73029218-b1cc-46cd-b970-647ebf9d8979-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="a37422d2-85b9-4b20-aaed-ed832709d897"><strong>SSD :</strong> Solid State Drive <a href="#a37422d2-85b9-4b20-aaed-ed832709d897-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="551f4327-d659-4f5e-aa79-e901800f9a6f"><strong>DARPA :</strong> Defense Advanced Research Projects Agency <a href="#551f4327-d659-4f5e-aa79-e901800f9a6f-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="7ddca2cc-8395-4bb3-9a48-65ef2cbdd525"><strong>IHM :</strong> Interface Homme Machine <a href="#7ddca2cc-8395-4bb3-9a48-65ef2cbdd525-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="3da01144-9884-4e50-80b3-cb720fe5d120"><strong>AGI :</strong> Artificial General Intelligence <a href="#3da01144-9884-4e50-80b3-cb720fe5d120-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="6b6187e7-bf8d-4671-888c-ddabe2812f2a"><strong>SVM :</strong> Support Vector Machine <a href="#6b6187e7-bf8d-4671-888c-ddabe2812f2a-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="2ccacfdc-8014-4064-9420-0e51ef9e2778"><strong>NLP :</strong> Natural Language Processing <a href="#2ccacfdc-8014-4064-9420-0e51ef9e2778-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="4e84b708-3cbf-4c9d-af94-e19d2cd9d82e"><strong>RAG :</strong> Retrieval Augmented Generation <a href="#4e84b708-3cbf-4c9d-af94-e19d2cd9d82e-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="75955ef0-37da-444b-ba62-3eced558a61a"><strong>API :</strong> Application Programming Interface <a href="#75955ef0-37da-444b-ba62-3eced558a61a-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="6ad53fdd-7b83-46bd-8608-5b89bf94b781"><strong>HTTP :</strong> Hypertext Transfer Protocol <a href="#6ad53fdd-7b83-46bd-8608-5b89bf94b781-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="ff1afc50-05de-4bce-91e3-563ae4b9fe9f"><strong>UTM :</strong> Unified Threat Management <a href="#ff1afc50-05de-4bce-91e3-563ae4b9fe9f-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Linux Partitions Calculator</title>
		<link>https://erwanguillemard.com/projet-linux-partitions-calculator/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 11 Apr 2026 13:55:29 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3409</guid>

					<description><![CDATA[Je ne pensais pas en venir un jour à rédiger un article sur cette thématique. Pourtant force est de constater que je me suis fait encore une fois ch*er la bi*e (passez-moi l&#8217;expression) à déployer une machine linux. Je rassure le lecteur qui s&#8217;est égaré ici, ce billet va être simple. Bref, j&#8217;ai la problématique...]]></description>
										<content:encoded><![CDATA[
<p>Je ne pensais pas en venir un jour à rédiger un article sur cette thématique. Pourtant force est de constater que je me suis fait encore une fois ch*er la bi*e (passez-moi l&rsquo;expression) à déployer une machine linux.</p>



<p>Je rassure le lecteur qui s&rsquo;est égaré ici, ce billet va être simple.</p>



<p>Bref, j&rsquo;ai la problématique suivante, lorsque je déploie une nouvelle machine Linux (RHEL<sup data-fn="d0cf7aef-1d32-469c-80aa-165e012513eb" class="fn"><a href="#d0cf7aef-1d32-469c-80aa-165e012513eb" id="d0cf7aef-1d32-469c-80aa-165e012513eb-link">1</a></sup> ou Debian) je suis le guide d&rsquo;hygiène et sécurité de l&rsquo;ANSSI<sup data-fn="0a4dc23e-e493-4f49-8cdf-9a361464e536" class="fn"><a href="#0a4dc23e-e493-4f49-8cdf-9a361464e536" id="0a4dc23e-e493-4f49-8cdf-9a361464e536-link">2</a></sup>. Ce qui se traduit par le partitionnement strict des points de montage système et de données. Sauf que lorsque la taille de notre disque varie, difficile de définir de tête quelle volumétrie doit être provisionnée pour chaque partition&#8230;</p>



<p>C&rsquo;est donc là que j&rsquo;ai pris un coup de sang.</p>



<p class="has-text-align-center">En voiture Simone, c&rsquo;est parti !</p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p>Je ne vais pas rentrer dans le détail du code qui compose mon application, ce n&rsquo;est pas l&rsquo;objectif. Si l&rsquo;on souhaite comprendre ce dernier, un peu de réverse engineering et le tour est joué (surtout que j&rsquo;ai commenté le code).</p>



<p>Je n&rsquo;aborderai pas non plus la partie de durcissement des systèmes GNU Linux. Pourquoi ?</p>



<ol class="wp-block-list">
<li>Ce n&rsquo;est pas le sujet de ce billet</li>



<li>Je traite le sujet dans un de mes premiers articles que je ne partage que sur contact et échange</li>



<li>Je pars du principe que cela sera fait après déploiement du SE<sup data-fn="7c312e03-317c-474a-ab3e-448ddb4d3df3" class="fn"><a href="#7c312e03-317c-474a-ab3e-448ddb4d3df3" id="7c312e03-317c-474a-ab3e-448ddb4d3df3-link">3</a></sup>.</li>
</ol>



<p>L&rsquo;objectif est vraiment de comprendre ou du moins rappeler la structure d&rsquo;un système GNU quant à son arborescence d&rsquo;organisation de fichier. Et donc outre à mesure à comprendre pourquoi nous devons allouer plus ou moins d&rsquo;espace de stockage.</p>



<p>Concernant l&rsquo;application que j&rsquo;ai développé, bien que je revienne sur ce point plus bas dans ce billet, cette dernière n&rsquo;est pas fonctionnelle sur les environnements GNU Linux du fait de la GUI<sup data-fn="957eb17c-7564-49a4-beda-d11cd897f8a8" class="fn"><a href="#957eb17c-7564-49a4-beda-d11cd897f8a8" id="957eb17c-7564-49a4-beda-d11cd897f8a8-link">4</a></sup>.</p>



<p>Il est également important de souligné que cette application n&rsquo;est compatible qu&rsquo;avec la version 5.X de powershell. </p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>&nbsp;Environnement Windows non obsolète</li>



<li><strong>Apps :&nbsp;</strong>Non Applicable</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>PowerShell version 5.X</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<p>Si nous devons commencer par la base, il serait bon de se poser la question </p>



<p class="has-text-align-center"><strong>« Comment est structurer un environnement GNU Linux ? »</strong></p>



<p class="has-text-align-left">Contrairement à certaines connaissances que j&rsquo;ai pu fréquenter, oui c&rsquo;est un point important. Cela évite de faire n&rsquo;importe quoi et dans une outre mesure d&rsquo;apprendre quelques choses. (Toutes ressemblances avec des personnes existantes et purement fortuite).</p>



<p class="has-text-align-center"><strong>T&rsquo;es un peu chafouin en ce moment non ? Tu ne voudrais pas ton petit suppositoire à la verveine ?</strong></p>



<p class="has-text-align-left">Légèrement agacé avec une pointe de colère et donc de sarcasme il est vrai. L&rsquo;hypocrisie des uns fait le désespoir des autres. Mais OKLM comme disent les d&rsquo;jeuns je prends un sacré recul. Cependant, je suis partant pour la verveine mais pas en suppositoire, plus en pousse café 🙂 <a href="https://www.youtube.com/watch?v=s_aka1i0RD0&amp;list=RDs_aka1i0RD0&amp;start_radio=1">Et puis Monsieur, Madame, Mademoiselle, je suis bien fatigué&#8230; J&rsquo;en ai marre&#8230;</a></p>



<p>Regardons alors de plus près l&rsquo;architecture n à n-1.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="546" height="570" src="https://erwanguillemard.com/wp-content/uploads/2026/02/PP_005_001_arch.jpg" alt="" class="wp-image-3416" style="width:307px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/02/PP_005_001_arch.jpg 546w, https://erwanguillemard.com/wp-content/uploads/2026/02/PP_005_001_arch-287x300.jpg 287w" sizes="auto, (max-width: 546px) 100vw, 546px" /></figure>
</div>


<p>(Pas de panique je vais prendre le temps de décrire chaque répertoire).</p>



<p>Nous avons le répertoire parent de notre arborescence, communément appelé « la Racine » (et non rien à voir avec l&rsquo;organisation de l&rsquo;ombre de Konoha dans Naruto [super référence&#8230;]) ou <strong>root</strong>. C&rsquo;est sous ce répertoire <strong>/</strong> que nous allons retrouver les répertoires qui organise notre SE.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3409_97e24c-b7 kt-accordion-has-14-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3409_1e6061-7a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/bin</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Ce répertoire est l&rsquo;abréviation de <strong>binaries</strong>. Il est essentiel au bon fonctionnement du système puisque ce dernier va contenir l&rsquo;ensemble des commandes exécutables de bases.</p>



<p>C&rsquo;est ici que nous retrouvons les programmes nécessaires au mode de restauration ainsi qu&rsquo;au démarrage du système. C&rsquo;est je pense l&rsquo;un des répertoire les plus important du système.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3409_4a9c15-d7"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/boot</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Ce répertoire est réservé au rangement des chaussures afin d&rsquo;utiliser nos sockets&#8230; Ok je sors.</p>



<p>Plus sérieusement, ce répertoire contient tout ce qui est nécessaire au démarrage du système. </p>



<p class="has-text-align-center"><strong>Pas de /boot ? Pas de démarrage&#8230;</strong></p>



<p class="has-text-align-left">Ce dernier contient le kernel (noyau Linux), les fichiers d&rsquo;amorçage (bootloader pour ne pas dire GRUB<sup data-fn="6b4eeabd-5566-437e-ab1d-1980ef7ba3d1" class="fn"><a href="#6b4eeabd-5566-437e-ab1d-1980ef7ba3d1" id="6b4eeabd-5566-437e-ab1d-1980ef7ba3d1-link">5</a></sup> dans la majorité des cas) ainsi que l&rsquo;initramfs ou initrd (cela dépend) qui est notre « petit » système d&rsquo;exploitation temporaire. Il va sans dire que ce dernier est critique&#8230;</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3409_cb4761-85"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/dev</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Ce répertoire est l&rsquo;abréviation de <strong>devices</strong>. C&rsquo;est dans ce répertoire que nous allons retrouver l&rsquo;ensemble des fichiers spéciaux représentant les périphériques systèmes. </p>



<p class="has-text-align-center">Si nous avions des doutes, sous Linux, <strong><em>Tout est fichiers</em></strong>.</p>



<p class="has-text-align-left">Bref, c&rsquo;est ici que nous allons interagir avec nos médias de stockage, les périphériques tels que caméra, micro, audio etc&#8230; C&rsquo;est notre noyau qui gère son contenu.</p>



<p>Ce n&rsquo;est ni plus ni moins que l&rsquo;interface entre notre système logique et notre système physique pour ne pas dire matériel.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3409_def777-a5"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/etc</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>/etc, l&rsquo;un des dossiers les plus importants&#8230; C&rsquo;est dans ce dernier que nous allons retrouver l&rsquo;ensemble des fichiers de configuration du système. Il me semble de jadis ce que j&rsquo;ai écrit dans mes cours de licence (merci M. HSU) que c&rsquo;est l&rsquo;abréviation de <strong>et cetera</strong> (c&rsquo;était pour la minute <a href="https://www.youtube.com/watch?v=nWdUojwhJVo">Père castor</a>)</p>



<ul class="wp-block-list">
<li>Configurations globales du système</li>



<li>Paramètres de sécurité</li>



<li>Informations sur les utilisateurs</li>



<li>Configuration réseau</li>



<li>Configuration des services</li>
</ul>



<p>Généralement, la modification des fichiers nécessite les droits d&rsquo;administrations. Il est généralement conseillé avant toutes altérations de faire une copie du fichier d&rsquo;origine 🙂</p>



<p class="has-text-align-center">Généralement on se fait avoir une fois pas deux <strong>#bisous</strong></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3409_11bf63-4a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/home</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="has-text-align-center"><a href="https://www.youtube.com/watch?v=6FLXqkL9MPM">E.T phone&#8230; HHHHH-OOOOOOOMMMMM-EEE&#8230;</a></p>



<p>C&rsquo;est le répertoire utilisateur. C&rsquo;est dans ce dernier que les utilisateurs vont stocker leurs items, et c&rsquo;est également dans ce dernier que la configuration propre au profil de l&rsquo;utilisateur est stockée.</p>



<p>Pour faire simple, c&rsquo;est un espace personnel limité par des permissions strictes pour chaque utilisateur.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3409_ae88eb-cd"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/lib</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Abréviation de <strong>librairie</strong>, ce répertoire va contenir l&rsquo;ensemble des bibliothèques partagées essentielles et nécessaires au fonctionnement de notre système et des exécutables stockés dans les répertoires <strong>/bin</strong> et <strong>/sbin</strong>.</p>



<p>Si nous faisions la comparaison avec Windows, les fichiers .dll s&rsquo;appellent .so.</p>



<p>Dans ce répertoire nous retrouvons également les modules du kernel. Ce répertoire est critique pour le système car lié au /bin.</p>



<p class="has-text-align-center">Merci Capt&rsquo;ain Obvious !</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-7 kt-pane3409_83b8b1-28"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/media</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>L&rsquo;un des amalgames que nous pouvons souvent faire avec ce répertoire se fait avec le répertoire <strong>/dev</strong> et <strong>/mnt</strong>.</p>



<p>Effectivement, le répertoire <strong>/media</strong> sert de point de montage automatique pour les périphériques amovibles. Si vous voyez genre les Usb-Key, CD/DVD, DD externe, Disquette, Carte SD etc&#8230; C&rsquo;est pourquoi nous ne retrouvons pas ces périphériques dans <strong>/dev</strong>.</p>



<p>Le fait que le point de montage se fait automatiquement il n&rsquo;y a pas besoin de chercher du côté du répertoire <strong>/mnt</strong>.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-8 kt-pane3409_b55779-e4"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/mnt</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>L&rsquo;abréviation de <strong>mount</strong>. Ce répertoire est un point de montage temporaire pour monter manuellement des systèmes de fichiers.</p>



<p>Il sert à monter un disque manuellement, monter un ISO, accéder à une partition de réparation.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-9 kt-pane3409_9ec501-3a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/proc</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>C&rsquo;est un répertoire un peu particulier d&rsquo;abréviation <strong>processus</strong>. C&rsquo;est un système de fichiers virtuel qui est généré dynamiquement par le kernel.</p>



<p>Ainsi, nous retrouvons :</p>



<ul class="wp-block-list">
<li>Les processus actifs</li>



<li>Les informations des ressources (CPU et RAM)</li>



<li>La configuration du kernel</li>
</ul>



<p>Il est possible de modifier certains paramètres systèmes à chaud comme le réseau par exemple.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-10 kt-pane3409_1d05bd-93"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/sbin</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>De son abréviation <strong>system binaries</strong>, nous retrouvons les mêmes caractéristiques que le répertoire /bin à l&rsquo;exception que les commandes des exécutables présents dans le répertoire sont destinées principalement à l&rsquo;administration (utilisateur root).</p>



<p>Ainsi les ressources présentes dans le répertoire <strong>/sbin</strong> :</p>



<ul class="wp-block-list">
<li>Permettre le démarrage du système</li>



<li>Gérer l&rsquo;administration des partitions et des disques</li>



<li>Administrer le réseau</li>



<li>Réaliser la maintenance et récupération</li>
</ul>



<p>Les commandes étant sensibles, ces dernières ne doivent pas être accessible des utilisateurs. Uniquement des utilisateurs privilégiés.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-11 kt-pane3409_c96322-21"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/srv</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>De son petit nom <strong>service</strong>, ce répertoire va contenir les données des services fournis par le système.</p>



<p>Il sert à stocker les fichiers spécifiques aux services réseau ou applications serveurs. Généralement chaque service à son propre sous-dossier.</p>



<p>Les données présentes dans <strong>/srv</strong> sont considérées comme fixes. Dans le cas contraire il faudra se tourner vers le <strong>/var</strong>.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-12 kt-pane3409_b447db-5d"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/tmp</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Le répertoire <strong>temporaire</strong> enfin. Comme son nom l&rsquo;indique il va contenir des ressources temporaires durant l&rsquo;exécution d&rsquo;un programme, d&rsquo;échange de données inter processus, voire de zone tampon durant l&rsquo;installation ou compilation d&rsquo;un programme.</p>



<p>C&rsquo;est un répertoire magique, une zone grise. L&rsquo;avantage de ce répertoire se trouve dans la suppression des données à chaque redémarrage du système.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-14 kt-pane3409_f75fa3-11"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/var</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Le dossier <strong>variable</strong>&#8230; Ce répertoire va contenir les données qui vont changer dans le temps contrairement aux fichiers statiques comme /usr, /bin, /srv.</p>



<p>Ce répertoire est généralement utilisé pour stocker des fichiers générés par le système ou par les applications (site web par exemple). Toutefois, nous retrouvons également :</p>



<ul class="wp-block-list">
<li>Les journaux systèmes et services (logs)</li>



<li>Les files d&rsquo;impressions ou mails (spools)</li>



<li>Les BDDs<sup data-fn="2d347e21-a763-4bc2-ab40-e0ef607de630" class="fn"><a href="#2d347e21-a763-4bc2-ab40-e0ef607de630" id="2d347e21-a763-4bc2-ab40-e0ef607de630-link">6</a></sup></li>



<li>Les fichiers temporaires persistants</li>
</ul>



<p>Attention car ce répertoire peut très vite grossir 🙂</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-13 kt-pane3409_955780-1c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/usr</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>L&rsquo;un des répertoires importants du système mais pas non critique. Ce dernier est l&rsquo;abréviation de <strong>user</strong> et va contenir les logiciels installés par le système ou l&rsquo;administrateur.</p>



<p>Une sous arborescence bien organisée est présente afin de garantir l&rsquo;accès aux programmes, bibliothèques et fichiers partagés pour l&rsquo;ensemble des utilisateurs :</p>



<ul class="wp-block-list">
<li><strong>/usr/bin :</strong> Programme accessible à tous les utilisateurs</li>



<li><strong>/usr/sbin :</strong> Programmes d&rsquo;administration</li>



<li><strong>/usr/lib :</strong> Bibliothèques partagées</li>



<li><strong>/usr/share :</strong> Fichiers partagés</li>



<li><strong>/usr/include :</strong> Fichiers header pour la compilation de logiciels</li>



<li><strong>/usr/local :</strong> Programmes installés manuellement</li>
</ul>



<p>Je peux vous dire que plus d&rsquo;une fois je me suis mordu les doigts pour ne pas avoir bien provisionné ma partition et je me retrouve bloqué en plein update ou durant une installation&#8230;</p>
</div></div></div>
</div></div></div>



<p></p>



<p>J&rsquo;en peux plus. C&rsquo;est que c&rsquo;est long comme retour aux bases&#8230; J&rsquo;espère ne pas avoir oublié de répertoire.</p>



<p>L&rsquo;une des mauvaises pratiques lors du déploiement d&rsquo;un SE Linux est d&rsquo;allouer l&rsquo;ensemble de l&rsquo;espace disponible à <strong>/</strong>, de ce fait si par exemple je viens à blinder le <strong>/var/tmp</strong> ou <strong>/var/log</strong> mon système est à genoux. Donc sur un disque il convient de partitionner les répertoires.</p>



<p class="has-text-align-center"><strong>Oui mais quels répertoires ?</strong></p>



<p>En réponse à cette question, <a href="https://www.youtube.com/watch?v=EvoL-FvSPDg">je mets en 3/4 face et je réponds par un Uraken</a> des familles en sortant le guide de l&rsquo;ANSSI.</p>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="600" height="632" class="wp-image-1459" style="width: 600px;" src="https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_012_R12_part.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_012_R12_part.png 338w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_012_R12_part-285x300.png 285w" sizes="auto, (max-width: 600px) 100vw, 600px" /></td><td>Cela offre également une autre possibilité concernant la sécurité.<br><br>Au-delà d&rsquo;assurer le fonctionnement du système quant au potentiel risque de saturation de stockage, il est possible de définir des options sur les points de montage de nos répertoires.<br><br>Ainsi il est possible de limiter l&rsquo;accès au device ou l&rsquo;exécution de programme.<br><br>Je préconise également d&rsquo;ajouter le répertoire <strong>/var/log/audit</strong>. <br><br>Je ne rentre volontairement pas dans le détail car j&rsquo;explique ce point de recommandation (R12) dans mon billet concernant le durcissement d&rsquo;un système GNU Linux.</td></tr></tbody></table></figure>



<p class="has-text-align-center"><strong>Ok pour ce qui est de la segmentation, mais du coup, quel doit être la répartition niveau stockage ?</strong></p>



<p>C&rsquo;est plutôt simple. Encore une fois, il suffit de chercher un peu. Malheureusement il n&rsquo;y a pas de recommandation empirique. C&rsquo;est donc à nous de définir les seuils par répertoire en tenant compte des critères énoncés précédemment.</p>



<p>Pour ma part cela donne :</p>



<figure class="wp-block-table has-small-font-size"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Répertoires</strong></td><td class="has-text-align-center" data-align="center"><strong>% Minimum</strong></td><td class="has-text-align-center" data-align="center"><strong>% Maximum</strong></td></tr><tr><td class="has-text-align-center" data-align="center">/</td><td class="has-text-align-center" data-align="center">10%</td><td class="has-text-align-center" data-align="center">15%</td></tr><tr><td class="has-text-align-center" data-align="center">/boot</td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#fe0000" class="has-inline-color">*</mark> 1024 Mio</strong></td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#fe0000" class="has-inline-color">*</mark> 1024 Mio</strong></td></tr><tr><td class="has-text-align-center" data-align="center">/usr</td><td class="has-text-align-center" data-align="center">10%</td><td class="has-text-align-center" data-align="center">15%</td></tr><tr><td class="has-text-align-center" data-align="center">/var</td><td class="has-text-align-center" data-align="center">10%</td><td class="has-text-align-center" data-align="center">15%</td></tr><tr><td class="has-text-align-center" data-align="center">swap</td><td class="has-text-align-center" data-align="center"><strong>1:1 de la RAM si =&lt; 8 Gio<br>1:0.5 de la RAM si &gt; 8 Gio</strong></td><td class="has-text-align-center" data-align="center"><strong>1:1 de la RAM si =&lt; 8 Gio<br>1:0.5 de la RAM si &gt; 8 Gio</strong></td></tr><tr><td class="has-text-align-center" data-align="center">/var/log</td><td class="has-text-align-center" data-align="center">5%</td><td class="has-text-align-center" data-align="center">10%</td></tr><tr><td class="has-text-align-center" data-align="center">/var/log/audit</td><td class="has-text-align-center" data-align="center">2%</td><td class="has-text-align-center" data-align="center">5%</td></tr><tr><td class="has-text-align-center" data-align="center">/var/tmp</td><td class="has-text-align-center" data-align="center">5%</td><td class="has-text-align-center" data-align="center">5%</td></tr><tr><td class="has-text-align-center" data-align="center">/tmp</td><td class="has-text-align-center" data-align="center">5%</td><td class="has-text-align-center" data-align="center">5%</td></tr><tr><td class="has-text-align-center" data-align="center">/opt</td><td class="has-text-align-center" data-align="center">5%</td><td class="has-text-align-center" data-align="center">10%</td></tr><tr><td class="has-text-align-center" data-align="center">/home</td><td class="has-text-align-center" data-align="center">10%</td><td class="has-text-align-center" data-align="center">10%</td></tr><tr><td class="has-text-align-center" data-align="center">/srv</td><td class="has-text-align-center" data-align="center">2%</td><td class="has-text-align-center" data-align="center">5%</td></tr></tbody></table></figure>



<p></p>



<p>Voilà ce qui est pour la théorie. Comme ça me soule de ne pas savoir quel espace allouer pour 30 Gio, 40 Gio, 50 Gio de disque, j&rsquo;ai été contraint de faire une petite application en Powershell&#8230; Pourquoi changer une équipe qui gagne ?</p>



<h2 class="wp-block-heading">Application</h2>



<p>Je reste un puriste en termes de développement et je ne peux me passer de Windows Powershell ISE<sup data-fn="29a21fb4-e351-4d35-8f8b-3970b17ecbef" class="fn"><a href="#29a21fb4-e351-4d35-8f8b-3970b17ecbef" id="29a21fb4-e351-4d35-8f8b-3970b17ecbef-link">7</a></sup>. Je sais qu&rsquo;il existe mieux comme IDE<sup data-fn="2a0ff43d-b86a-4ec2-affb-823bcb64afdc" class="fn"><a href="#2a0ff43d-b86a-4ec2-affb-823bcb64afdc" id="2a0ff43d-b86a-4ec2-affb-823bcb64afdc-link">8</a></sup> (Visual Studio Code par exemple) mais je n&rsquo;arrive pas à me faire à l&rsquo;idée de quitter ISE&#8230;</p>



<p class="has-text-align-center"><strong>Cela fait-il de moi un vieux réactionnaire ? Un dev de l&rsquo;ancien temps ?</strong></p>



<p>Bref, je laisse cette question existentielle en suspens.</p>



<p>Je me suis amusé pour une fois à réaliser une interface GUI<sup data-fn="f0557ebb-6968-4aca-a988-4463d1adb9db" class="fn"><a href="#f0557ebb-6968-4aca-a988-4463d1adb9db" id="f0557ebb-6968-4aca-a988-4463d1adb9db-link">9</a></sup> via WindowsForm. Moi l&rsquo;amoureux du CLI<sup data-fn="3e18b1eb-c04c-4c76-bba6-28e2298ac5a5" class="fn"><a href="#3e18b1eb-c04c-4c76-bba6-28e2298ac5a5" id="3e18b1eb-c04c-4c76-bba6-28e2298ac5a5-link">10</a></sup> je reconnais mettre amusé. Encore une fois <a href="https://www.youtube.com/watch?v=1SERx1KyECU&amp;list=RD1SERx1KyECU&amp;start_radio=1">je sais que je ne savais rien</a> et j&rsquo;ai donc encore appris.</p>



<p>Réaliser une application GUI en plaçant les items au pixel c&rsquo;est marrant mais vite casse gueule. Cela demande une gymnastique d&rsquo;esprit qui ne me rebute pas.</p>



<p>Il y a toutefois un bémol non négligeable à l&rsquo;utilisation de WindowsForm, cela ne permet pas l&rsquo;opérabilité multiplateforme. Logique puisque WindowsForm fait partie intégrante de Windows, donc pas possible de faire fonctionner ce dernier sous Linux.</p>



<p>Il faudrait donc que je compose un mode de fonctionnement CLI pour assurer l&rsquo;opérabilité. Cela n&rsquo;est qu&rsquo;au final que le développement d&rsquo;une fonction d&rsquo;affichage.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>La première version de mon application ne se base pas pour l&rsquo;instant sur un fichier de configuration ce qui implique que les seuils minimums et maximums sont défini en dur dans le code (en tant que constante global tout de même je ne suis pas un sauvage !).</td><td><img loading="lazy" decoding="async" width="550" height="388" class="wp-image-3431" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_005_002_app.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_005_002_app.jpg 932w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_005_002_app-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_005_002_app-768x541.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p>J&rsquo;offre également la possibilité de définir la taille minimum ou maximum à provisionner.</p>



<p>Pour bien comprendre (c&rsquo;est un grand mot) je propose la courte vidéo de présentation de la version béta de mon app.</p>



<h3 class="wp-block-heading">Démonstration</h3>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="PROJET   Linux Partitions Calculator" width="720" height="405" src="https://www.youtube.com/embed/-pFmGdQvl3E?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h3 class="wp-block-heading">GitHub</h3>



<p class="has-text-align-center"><a href="https://github.com/EGuillemard/GS_002_UNI_SYS_Storage">Miaou</a></p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Qu&rsquo;il est bon de revenir aux bases. Sans cela, je pense que je n&rsquo;aurai pas eu l&rsquo;idée de faire du GUI en powershell depuis mon ISE. Il est vrai que cela permet également de revenir peut-être aux prémices de ce blog qui étaient :</p>



<ul class="wp-block-list">
<li>L&rsquo;aspect pédagogique</li>



<li>Aborder les bases</li>



<li>Réaliser des petits projets</li>



<li>Sortir des sentiers battus</li>
</ul>



<p>Ainsi, je renoue avec certaines valeurs laissées de côté dans le cadre des derniers gros projets que j&rsquo;ai pu mener. Toutefois, je reste une tête de c*n à laisser transparaitre ma désinvolture, sarcasmes et autres tournures de phrases et expressions vitriolés 🙂 (Ce blog et mes articles restent un loisir personnel et cela m&rsquo;amuse d&rsquo;user de ma liberté d&rsquo;expression tout en tachant de rester respectueux).</p>



<p>Bref, il est temps de clôturer ce billet et d&rsquo;attaquer d&rsquo;autres thématiques 🙂 </p>



<p>Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>J&rsquo;ai évalué et calculé mon incompétence, elle est à la hauteur de vos mensonges et de votre lâcheté. Un petit partitionnement de prime et de service ? Vous méritez bien convenablement un pâté lorrain en cadeau ?</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://www.debian.org/releases/stable/arm64/apcs03.en.html">Debian : Recommanded Partitioning</a></li>



<li><a href="https://help.ubuntu.com/community/DiskSpace">Ubuntu : DiskSpace</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="d0cf7aef-1d32-469c-80aa-165e012513eb"><strong>RHEL :</strong> RedHat Entreprise Linux <a href="#d0cf7aef-1d32-469c-80aa-165e012513eb-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="0a4dc23e-e493-4f49-8cdf-9a361464e536"><strong>ANSSI :</strong> Agence Nationale de Sécurité des Systèmes d&rsquo;Informations <a href="#0a4dc23e-e493-4f49-8cdf-9a361464e536-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="7c312e03-317c-474a-ab3e-448ddb4d3df3"><strong>SE :</strong> Système d&rsquo;Exploitation <a href="#7c312e03-317c-474a-ab3e-448ddb4d3df3-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="957eb17c-7564-49a4-beda-d11cd897f8a8"><strong>GUI :</strong> Graphical User Interface <a href="#957eb17c-7564-49a4-beda-d11cd897f8a8-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="6b4eeabd-5566-437e-ab1d-1980ef7ba3d1"><strong>GRUB :</strong> GRand Unifier Bootloader <a href="#6b4eeabd-5566-437e-ab1d-1980ef7ba3d1-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="2d347e21-a763-4bc2-ab40-e0ef607de630"><strong>BDD :</strong> Base De Données <a href="#2d347e21-a763-4bc2-ab40-e0ef607de630-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="29a21fb4-e351-4d35-8f8b-3970b17ecbef"><strong>ISE :</strong> Integrated Scripting Environment <a href="#29a21fb4-e351-4d35-8f8b-3970b17ecbef-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="2a0ff43d-b86a-4ec2-affb-823bcb64afdc"><strong>IDE :</strong> Integraded Development Environment <a href="#2a0ff43d-b86a-4ec2-affb-823bcb64afdc-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="f0557ebb-6968-4aca-a988-4463d1adb9db"><strong>GUI :</strong> Graphical User Interface <a href="#f0557ebb-6968-4aca-a988-4463d1adb9db-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="3e18b1eb-c04c-4c76-bba6-28e2298ac5a5"><strong>CLI :</strong> Command Line Interface  <a href="#3e18b1eb-c04c-4c76-bba6-28e2298ac5a5-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WIN &#8211; ADDS &#038; Temporary Group Membership</title>
		<link>https://erwanguillemard.com/win-adds-temporary-group-membership/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 04 Apr 2026 14:50:00 +0000</pubDate>
				<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[ADDS]]></category>
		<category><![CDATA[Securité]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3327</guid>

					<description><![CDATA[Il n&#8217;est jamais trop tard pour parler de sécurité et de découvrir des fonctionnalités existantes sur lesquelles je suis passé allégrement à côté et ce depuis 2016&#8230; Comme quoi, il n&#8217;est jamais trop tard. Alors de quel mécanisme de sécurité vais-je aborder ? Dans l&#8217;ère du temps, nous parlons sans cesse de PAM, PIM, ZTNA,...]]></description>
										<content:encoded><![CDATA[
<p>Il n&rsquo;est jamais trop tard pour parler de sécurité et de découvrir des fonctionnalités existantes sur lesquelles je suis passé allégrement à côté et ce depuis 2016&#8230; Comme quoi, il n&rsquo;est jamais trop tard.</p>



<p class="has-text-align-center"><strong>Alors de quel mécanisme de sécurité vais-je aborder ? </strong></p>



<p>Dans l&rsquo;ère du temps, nous parlons sans cesse de PAM<sup data-fn="ec10b2ae-5ea1-491a-a70e-30a705e606ba" class="fn"><a href="#ec10b2ae-5ea1-491a-a70e-30a705e606ba" id="ec10b2ae-5ea1-491a-a70e-30a705e606ba-link">1</a></sup>, PIM<sup data-fn="44bed6e4-dd83-4e4d-a36d-3d5b0d5e1df7" class="fn"><a href="#44bed6e4-dd83-4e4d-a36d-3d5b0d5e1df7" id="44bed6e4-dd83-4e4d-a36d-3d5b0d5e1df7-link">2</a></sup>, ZTNA<sup data-fn="a7f26285-202f-4abc-8fbe-495c821aa98b" class="fn"><a href="#a7f26285-202f-4abc-8fbe-495c821aa98b" id="a7f26285-202f-4abc-8fbe-495c821aa98b-link">3</a></sup>, termes qui jusqu&rsquo;il y a quelques années étaient obscurs et commençaient tous justes à émerger. Si aujourd&rsquo;hui ces termes sont incontournables, je m&rsquo;interroge à implémenter ces derniers dans un environnement OnPremise (pour ne pas dire mon environnement) en tenant compte :</p>



<ul class="wp-block-list">
<li>Du modèle de tiering de l&rsquo;infrastructure</li>



<li>De la segmentation en place des rôles et permissions</li>



<li>Du durcissement de sécurité</li>
</ul>



<p>Toutefois et encore une fois, comme le disait un ancien collègue la sécurité ce n&rsquo;est pas pratique et je souhaite mettre en place une certaine souplesse à certains comptes utilisateurs bien identifiés.</p>



<p class="has-text-align-center"><a href="https://www.youtube.com/watch?v=IOtfbXAGKG4&amp;list=RDIOtfbXAGKG4&amp;start_radio=1">Pif, PAM, Pouf, Je suis informaticien ; Pif, PAM, Pouf ça c&rsquo;est vraiment trop bien !</a></p>



<p>Donc me voilà parti pour l&rsquo;étude et l&rsquo;implémentation d&rsquo;une des fonctionnalités PAM fournit par Windows, l&rsquo;appartenance temporaire à un groupe ou Temporary Group Membership (TGM<sup data-fn="8172a65b-8801-4743-896d-7be205dc4dea" class="fn"><a href="#8172a65b-8801-4743-896d-7be205dc4dea" id="8172a65b-8801-4743-896d-7be205dc4dea-link">4</a></sup>).</p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p>Je pars du principe que nous avons un environnement Windows avec un contrôleur ADDS<sup data-fn="329a3ad9-bad6-4ee9-8018-4f04b6a0ce09" class="fn"><a href="#329a3ad9-bad6-4ee9-8018-4f04b6a0ce09" id="329a3ad9-bad6-4ee9-8018-4f04b6a0ce09-link">5</a></sup>. Ce dernier est OnPremise est non hybride (pas de jonction avec AAD<sup data-fn="66200fbf-59c4-4470-8c5f-4a5d63bd91a8" class="fn"><a href="#66200fbf-59c4-4470-8c5f-4a5d63bd91a8" id="66200fbf-59c4-4470-8c5f-4a5d63bd91a8-link">6</a></sup>).</p>



<p>Notre architecture se base sur la segmentation en tiering de notre SI<sup data-fn="b2c40b43-9f6f-4d0d-9f38-135df62b4c9b" class="fn"><a href="#b2c40b43-9f6f-4d0d-9f38-135df62b4c9b" id="b2c40b43-9f6f-4d0d-9f38-135df62b4c9b-link">7</a></sup> et notre ADDS est durci selon les préconisations de l&rsquo;ANSSI<sup data-fn="1b7dbd0d-2d64-4802-83f8-a9c929f472c5" class="fn"><a href="#1b7dbd0d-2d64-4802-83f8-a9c929f472c5" id="1b7dbd0d-2d64-4802-83f8-a9c929f472c5-link">8</a></sup>.</p>



<p>L&rsquo;objectif que je me fixe est donc de mettre en place la fonctionnalité d&rsquo;attribution de droit d&rsquo;administration temporairement à un utilisateur sans à avoir de :</p>



<ul class="wp-block-list">
<li>Créer un compte d&rsquo;administration dédié à un usage ponctuel</li>



<li>D&rsquo;attribuer les droits d&rsquo;administration (domaine ou local) permanent</li>
</ul>



<p>Comme d&rsquo;accoutumé (car nous ne changeons pas les bonnes vieilles habitudes) l&rsquo;environnement Windows sera durci selon les bonnes pratiques et j&rsquo;utiliserai mes deux contrôleurs de domaine 2025 en CORE.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>
<ul class="wp-block-list">
<li>Windows Server : 2k16 et version ultérieures</li>
</ul>
</li>



<li><strong>Apps :</strong>
<ul class="wp-block-list">
<li>ADDS</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>Non applicable</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<p>Il est important de comprendre comment fonctionne et ce qu&rsquo;apporte l&rsquo;ajout de la fonctionnalité « Privileged Access Management Feature ».</p>



<p>Il est impératif et primordial que l&rsquo;ensemble des serveurs AD soit <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color"><span style="text-decoration: underline;">au minima en version WS 2k16</span></mark> et donc que le schéma de la forêt soit en version 2016.</p>



<p>Au vu des derniers propos énoncés, nous pouvons nous douter que nous allons altérer le schéma de notre AD. Ce qui est implicite (mais enfonçons une porte ouverte), l&rsquo;installation de cette fonctionnalité sera irréversible (oui c&rsquo;est une extension du schéma&#8230; La base j&rsquo;en encore envie d&rsquo;écrire. Oups c&rsquo;est fait).</p>



<h3 class="wp-block-heading">Extension du schéma Active Directory</h3>



<p>Je juge important de savoir ce qui va être ajouté. C&rsquo;est pourquoi une sous partie va être nécessaire pour regarder plus en détail la liste des nouveaux objets et attributs.</p>



<p>La liste n&rsquo;est pas longue. Toutefois il convient de rappeler que « ce n&rsquo;est pas le nombre d&rsquo;objet qui fait la force » mais leur usage.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3327_85f65d-fd kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3327_72b917-7f"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Objets</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>L&rsquo;un des objets centraux de PAM est l&rsquo;object <strong>msDS-ShadowPrincipal</strong>. Son rôle représente un principal de sécurité fantôme qui sert notamment de jonction temporaire entre un utilisateur ou groupe à un groupe privilégié.</p>



<p>Le second objet est un container <strong>msDS-ShadowPrincipalContainer</strong>. Ce dernier va contenir les objets de type msDS-ShadowPrincipal et garantir une organisation de la configuration PAM.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3327_bbbea9-ea"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Attributs</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Nous distinguons deux types d&rsquo;attributs. Les attributs spécifiques propres à PAM et les attributs étendus.</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">msDS-ShadowPrincipalSid :</span></strong> De type SID, ce dernier permet de prendre le SID<sup data-fn="4efd3a4f-04e4-49de-8f24-1f8166178ee7" class="fn"><a href="#4efd3a4f-04e4-49de-8f24-1f8166178ee7" id="4efd3a4f-04e4-49de-8f24-1f8166178ee7-link">9</a></sup> du compte utilisateur ou du groupe (externe ou interne) et de créer la jonction d&rsquo;appartenance temporaire. En plus simple, c&rsquo;est ce qui va permettre à notre AD<sup data-fn="190798aa-1ac2-44b6-be35-e16ee5e894f0" class="fn"><a href="#190798aa-1ac2-44b6-be35-e16ee5e894f0" id="190798aa-1ac2-44b6-be35-e16ee5e894f0-link">10</a></sup> de traiter l&rsquo;appartenance temporaire (fantôme) comme un groupe de sécurité à part entière.</li>



<li><strong><span style="text-decoration: underline;">memberTimeToLive : </span></strong>De type integer, ce dernier va prendre en compte la durée du TTL<sup data-fn="e6bbd41f-636e-49b9-ac13-b18007210b46" class="fn"><a href="#e6bbd41f-636e-49b9-ac13-b18007210b46" id="e6bbd41f-636e-49b9-ac13-b18007210b46-link">11</a></sup> en secondes de l&rsquo;appartenance de notre compte utilisateur ou groupe à un autre groupe. Cet attribut fonctionne avec les groupes member et memberOf. Une fois la durée expiré, la suppression est automatique.</li>
</ul>



<p>Dans le cas des attributs étendus ces derniers sont déjà présents dans le schéma initial. Néanmoins, ces derniers deviennent d&rsquo;une haute criticité avec l&rsquo;ajout de la fonctionnalité PAM. Pourquoi ? Simplement parce qu&rsquo;il va avoir la capacité de prendre en comptes des valeurs avec TTL.</p>



<p>Ceci est vrai pour l&rsquo;attribut member.</p>



<p class="has-text-align-center">member;TTL=3600</p>



<p>L&rsquo;attribut memberOf quant à lui va gérer les appartenances temp</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3327_89f519-6c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Droits étendus</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Du côté des droits étendus (où <em>Extended Rights</em> pour nos amis anglophones) liés au Shadow Principal sont à noter les droits suivants :</p>



<ul class="wp-block-list">
<li><strong>Create msDS-ShadowPrincipal objects</strong></li>



<li><strong>Manage Shadow Principal Membership</strong></li>
</ul>



<p>Ces deux extensions sont relativement importantes puisqu&rsquo;elles permettent de générer des flux d&rsquo;approbation (Approbation Workflows), les scripts d&rsquo;automatisations et le MIM<sup data-fn="e9681cdd-0dac-4c25-a6dd-b2b28e9fe052" class="fn"><a href="#e9681cdd-0dac-4c25-a6dd-b2b28e9fe052" id="e9681cdd-0dac-4c25-a6dd-b2b28e9fe052-link">12</a></sup> PAM.</p>



<p class="has-text-align-center"><a href="https://www.youtube.com/watch?v=arXrc2UqHFM">Barrez vous ! Cons de mimes !</a></p>



<p>Attention, il est important de dissocier deux points bien précis concernant MIM et PIM<sup data-fn="504a3fd7-1971-42ff-a3b1-99c39c72cfbc" class="fn"><a href="#504a3fd7-1971-42ff-a3b1-99c39c72cfbc" id="504a3fd7-1971-42ff-a3b1-99c39c72cfbc-link">13</a></sup>. MIM pour Microsoft Identity Manager et un composant OnPremise qui n&rsquo;a absolument rien à voir avec PIM du cloud Azure.</p>



<p></p>
</div></div></div>
</div></div></div>



<p></p>



<p class="has-text-align-center">Et avec tous les points, quand est-il des risques ? Oh quasi rien (#MDR)</p>



<h3 class="wp-block-heading">Risques</h3>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3327_47471e-43 kt-accordion-has-6-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3327_88f8c1-db"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Structurels</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>L&rsquo;un des premiers risques seraient lors du déploiement de la fonctionnalité. Il est important de bien prendre en compte le côté irréversible de l&rsquo;opération. Je recommanderai de vérifier en amont l&rsquo;état de santé des DCs et de la topologie souhaitée. L&rsquo;objectif étant de ne pas se coltiner une dette technique des familles à la suite d&rsquo;une mauvaise conception.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3327_20140b-43"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Délégations</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Attention à la délégation sur notre container (CN=Shadow Principal Configuration). Si ces derniers sont trop larges un type comme Waldo peut se définir Admin du Domain en créant un ShadowPrincipal. Et hop ! Une escalade invisible&#8230;</td><td><img loading="lazy" decoding="async" width="850" height="1801" class="wp-image-3380" style="width: 850px;" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_000_Odlaw.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_000_Odlaw.jpg 253w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_000_Odlaw-142x300.jpg 142w" sizes="auto, (max-width: 850px) 100vw, 850px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3327_39200c-8b"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Sécurités</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Continuons de parler d&rsquo;escalade (<a href="https://youtube.com/shorts/wSKFuIuek_o?feature=share">perso, moi c&rsquo;est le bloc jusqu&rsquo;à ce que je ni**e deux ménisques</a>), le risque d&rsquo;une escalade furtive et temporaire&#8230; </p>



<p>Les mécanismes PAM octroyant des droits temporaires, l&rsquo;usage d&rsquo;un compte admin temporaire serait peu visibles dans les journaux d&rsquo;audit et sont souvent peu, voire mal surveillés. Ainsi, un attaquant peut devenir Admin du Domain pour 1 heure réaliser une opération de type DCsync plus la création d&rsquo;une backdoor et ce je la jouer à la <a href="https://www.youtube.com/watch?v=DGpYL-0hyic">David Copperfield</a>&#8230;</p>



<p>Une attaque directe par ShadowPrincipals à travers un compte compromis ayant les droits PAM. De cette manière, notre Charlie ou Waldo peut créer un ShadowPrincipal ajoutant un TTL à un groupe d&rsquo;administration (Tiers 0) sans à avoir besoin de modifier directement le groupe. Cette méthode permettrait de contourner un grand nombre de mécanisme de sécurité en place.</p>



<p>L&rsquo;attaque par SID, le classique des classiques. Comme vu précédemment, l&rsquo;attribut msDS-ShadowPrincipalSid accepte des SID internes et externes (dans le cas de forêt approuvé). Ainsi, une mauvaise gestion des relations d&rsquo;approbations ou la compromission d&rsquo;une forêt externe donnerait automatiquement un accès privilégié au SI local.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3327_a9f58a-e2"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Opérationnels</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>La perte d&rsquo;un accès administrateur qui aurait été délégué sur une mauvaise évaluation de la durée du TTL pourrait être lourd de conséquence. Risque de ne plus être administrateur durant une opération critique nécessitant les droits d&rsquo;administrations par exemple et donc de se retrouver totalement bloqué.</p>



<p>Une complexité trop élevée peut également relever d&rsquo;un frein. Cela peut rendre les débogages longs et fastidieux (un peu comme ma b**e&#8230; Très très drôle M&rsquo;sieur&#8230;) ainsi que des comportements inattendus. La pire chose possible reste la mauvaise formation des équipes et le risque d&rsquo;erreurs fréquentes par les équipes de Niveau 0 ou 1.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3327_52f57d-da"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Gouvernances et Humains</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>De la mauvaise formation des équipes relèvent souvent de processus non définis ou totalement ignoré. Ainsi il ne serait pas rare d&rsquo;assigner des TTLs trop longs dans le temps pour avoir la paix (qu&rsquo;est-ce que la sécurité peut être pénible) ou de définir des TTLs trop courts et d&rsquo;enchainer les élévations temporaires.</p>



<p class="has-text-align-center"><strong>Se pose alors la question de « Mais à quoi sert le PAM finalement ? »</strong></p>



<p>L&rsquo;excès de confiance et son mauvais usage peut entrainer un faux sentiment de sécurité. Le PAM a été implémenté, nous ne risquons rien. Sauf que les comptes d&rsquo;administrations ne sont pas protégés correctement et dans le cas de compromission d&rsquo;un poste admin&#8230; Je ne fais pas de dessin hein ?</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3327_3ee10b-e2"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Audits et Conformités</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Comme inscrit précédemment, les journaux d&rsquo;évènements sont assez difficiles à identifier et à corréler dans le cadre d&rsquo;attribution temporaire des droits. Ainsi, l&rsquo;expiration d&rsquo;un TTL n&rsquo;est pas un évènement clair pour l&rsquo;audit. Ce qui peut facilement limiter l&rsquo;analyse et le diagnostic de la part des équipes.</p>



<p>C&rsquo;est pourquoi il va être nécessaire de porter une vigilance particulière sur les événements suivants :</p>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Event ID</strong></td><td><strong>Description / Rôles / Types</strong></td></tr><tr><td class="has-text-align-center" data-align="center">4728</td><td>Ajout à un groupe global</td></tr><tr><td class="has-text-align-center" data-align="center">4732</td><td>Ajout à un groupe local</td></tr><tr><td class="has-text-align-center" data-align="center">4756</td><td>Ajout à un groupe universel</td></tr><tr><td class="has-text-align-center" data-align="center">4729</td><td>Expiration ou Suppression à un groupe global</td></tr><tr><td class="has-text-align-center" data-align="center">4733</td><td>Expiration ou Suppression à un groupe local</td></tr><tr><td class="has-text-align-center" data-align="center">4757</td><td>Expiration ou Suppression à un groupe universel</td></tr><tr><td class="has-text-align-center" data-align="center">5137</td><td>Création d&rsquo;un objet</td></tr><tr><td class="has-text-align-center" data-align="center">5136</td><td>Modification d&rsquo;un objet</td></tr><tr><td class="has-text-align-center" data-align="center">5141</td><td>Suppression d&rsquo;un objet</td></tr><tr><td class="has-text-align-center" data-align="center">4672</td><td>Attribution de privilège élevés</td></tr><tr><td class="has-text-align-center" data-align="center">4624</td><td>Logon d&rsquo;un compte ayant des droits d&rsquo;administration</td></tr><tr><td class="has-text-align-center" data-align="center">4634</td><td>Logoff d&rsquo;un compte ayant des droits d&rsquo;administration</td></tr><tr><td class="has-text-align-center" data-align="center">4648</td><td>Logon explicite d&rsquo;un compte ayant des droits d&rsquo;administration</td></tr><tr><td class="has-text-align-center" data-align="center">4662</td><td>Accès d&rsquo;objets AD sensibles</td></tr><tr><td class="has-text-align-center" data-align="center">4719</td><td>Modification audit policy</td></tr><tr><td class="has-text-align-center" data-align="center">1102</td><td>Effacement des journaux</td></tr><tr><td class="has-text-align-center" data-align="center">4768/4769</td><td>Kerberos (corrélation des TTLs)</td></tr></tbody></table></figure>



<p>A cela s&rsquo;ajoute les diverses solutions du marché qui viennent auditer la santé des SIs et notamment celui des AD. Ces derniers ne prennent pas en compte l&rsquo;attribut <strong>member;TTL</strong> et ShadowPrincipal. Les SIEMs<sup data-fn="a7416798-8244-4996-ba17-b6cb7ce255a7" class="fn"><a href="#a7416798-8244-4996-ba17-b6cb7ce255a7" id="a7416798-8244-4996-ba17-b6cb7ce255a7-link">14</a></sup> valant paroles d&rsquo;évangiles pour les SOCs<sup data-fn="8aee950a-5f95-41a2-9837-c95f7eddccdb" class="fn"><a href="#8aee950a-5f95-41a2-9837-c95f7eddccdb" id="8aee950a-5f95-41a2-9837-c95f7eddccdb-link">15</a></sup>, hop ni une ni deux l&rsquo;informations passent à la trappe.</p>
</div></div></div>
</div></div></div>



<h3 class="wp-block-heading">Recommandations</h3>



<p>Les objectifs sont de pouvoir garantir <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">AUCUN</mark> accès administrateur permanent afin d&rsquo;obtenir une élévation <em><strong>temporaire</strong></em>, <strong><em>traçable</em></strong> et <strong><em>approuvé</em></strong><em><strong>e</strong></em> (je reviendrai sur ces points dans la partie pratique). Tout cela afin de contenir et maitrisé en cas de compromission l&rsquo;impact ainsi que la surface d&rsquo;exposition.</p>



<p>Il est également primordial de comprendre que l&rsquo;usage du PAM au sens windows du terme ne doit servir que pour :</p>



<ul class="wp-block-list">
<li>Admin du Domaine</li>



<li>Administrateur de l&rsquo;entreprise</li>



<li>Administrateur du schéma</li>



<li>Administrateurs DC<sup data-fn="ddad7c45-1971-48e1-9703-8ed11530de1c" class="fn"><a href="#ddad7c45-1971-48e1-9703-8ed11530de1c" id="ddad7c45-1971-48e1-9703-8ed11530de1c-link">16</a></sup></li>



<li>Autres (Comptes ADCS<sup data-fn="fb1718ee-484f-4432-9238-67b667dc952c" class="fn"><a href="#fb1718ee-484f-4432-9238-67b667dc952c" id="fb1718ee-484f-4432-9238-67b667dc952c-link">17</a></sup>, ADFS<sup data-fn="0ec485fd-eeb7-4b54-9765-4384bec2f735" class="fn"><a href="#0ec485fd-eeb7-4b54-9765-4384bec2f735" id="0ec485fd-eeb7-4b54-9765-4384bec2f735-link">18</a></sup>, AAD Connect)</li>
</ul>



<p>L&rsquo;usage pour du helpdesk ou pour des serveurs applicatifs doit être proscrit. Ce qui est logique car il revient à Services Informatiques d&rsquo;arbitrer sur les demandes utilisateurs. Néanmoins, pour octroyer des droits d&rsquo;administrateur à un stagiaire ou prestataire ça fonctionne très bien mais encore une fois sous réserve DE certains mécanismes.</p>



<p>Cela passe donc par plusieurs axes.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3327_db657d-6d kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3327_d6db93-58"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Architecture</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Il est important de noter qu&rsquo;avant toutes choses, les serveurs en Tiers 0 ne doivent pas avoir accès à internet en dehors des URLs approuvés (et c&rsquo;est non négociable) et ne doivent contenir QUE les logicielles d&rsquo;architecture et de sécurité (donc vous me virez vos salop***ies de NinjaRMM, LogMeIn, TeamViewer et compagnie).</p>



<ul class="wp-block-list">
<li><strong>URLs des serveurs antivirus (genre TrendMicro etc)</strong></li>



<li><strong>URLs des serveurs de mises à jour Microsoft</strong></li>
</ul>



<p>Il va de soi qu&rsquo;étant en Tiers 0, le réseau est isolé et filtré en entrée et sortie. Il n&rsquo;y a pas d&rsquo;administration direct depuis une ressources de Tiers 1 ou 2.</p>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Ci-contre, la topologie comme cette dernière devrait l&rsquo;être avec MIM et PAM.<br><br>Le fait d&rsquo;intercaler un server MIM-PAM entre notre ADDS et nos postes clients permettent d&rsquo;user comme dit précédemment des mécanismes d&rsquo;approbations de workflow et d&rsquo;automatisation.<br><br>Le serveur PAM doit être vu comme un bastion dans un réseau isolé de niveau T0.<br></td><td><img decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_005_001_Topologie_MIM.jpg" alt="https://learn.microsoft.com/fr-fr/microsoft-identity-manager/media/mim-topo-multitier.png"></td></tr></tbody></table></figure>



<p>La mise place d&rsquo;une telle architecture va être relativement complexe pour moi au vu des ressources disponibles niveau homelab. Je vais donc me passer du serveur intermédiaire MIM PAM.</p>



<p>Cette topologie est compatible et valide bien qui moins recommandée quant aux risques accrus relatif à l&rsquo;audit et d&rsquo;un contrôle moins efficace. Cela nous demandera donc en contrepartie d&rsquo;être irréprochable sur les groupes, droits et permissions lié à la délégation. Il sera nécessaire d&rsquo;avoir un regard et contrôle réguliers des scripts Powershell.</p>



<p>Donc me concernant je resterai sur mon modèle en place de tiering T0-T1-T2 avec segmentation et contrôle des flux.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3327_d09745-38"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Comptes &amp; IDs</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Cela me semble logique, mais important de le répéter il ne faut en aucun cas user d&rsquo;authentification interactif et de ne pas utiliser de compte administrateur. Et cherry on the cake, les comptes sont <strong><span style="text-decoration: underline;">TOUJOURS nominatifs</span></strong> (oui même pour vous les éditeurs).</p>



<p class="has-text-align-center">Ainsi, pas de compte admin permanent. 🙂</p>



<p>Néanmoins, il est important d&rsquo;avoir des comptes <strong><em>brises-glaces</em></strong> afin de ne pas se couper l&rsquo;herbe sous le pied. Dans la logique il en faudrait minimum deux et selon l&rsquo;ANSSI maximum deux (Décidemment la sécurité c&rsquo;est borderline). Naturellement ces comptes doivent être utilisés en cas d&rsquo;extrême urgence et lors de leurs usages une alerte doit être notifiée.</p>



<p>Ce qu&rsquo;il faut comprendre avec PAM, nous ne mettons pas tous nos œufs dans le même panier.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3327_88c420-62"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Nomenclatures des groupes</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Après ce qui a été dit dans le volet ci-haut, il est nécessaire de définir des GGS<sup data-fn="cd2a7bfd-1365-4cfa-876f-ba0c2c749e01" class="fn"><a href="#cd2a7bfd-1365-4cfa-876f-ba0c2c749e01" id="cd2a7bfd-1365-4cfa-876f-ba0c2c749e01-link">19</a></sup> propres au PAM et d&rsquo;ajouter ces derniers en tant que membre des groupes adéquates.</p>



<p>Ainsi pour ma part j&rsquo;userai de la nomenclature suivante :</p>



<p class="has-text-align-center"><strong><em>GGS_PAM_NOM_Elevation</em></strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="883" height="58" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_005_002_GGS-1.jpg" alt="" class="wp-image-3383" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_005_002_GGS-1.jpg 883w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_005_002_GGS-1-300x20.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_005_002_GGS-1-768x50.jpg 768w" sizes="auto, (max-width: 883px) 100vw, 883px" /></figure>
</div>


<p>Simple et efficace.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3327_747b32-20"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Durée de vie</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Crucial dilemme de la définition de la durée de l&rsquo;élévation de droit temporaire&#8230; Dans la logique une intervention standard est de 30 à 60 minutes en cas de crise nous pourrions définir 120 minutes maximum. Toute durée supérieure à 2 heures et donc interdit.</p>



<p class="has-text-align-center"><strong>Oui mais voilà, je dois faire une opération sensible en tant que SysAdmin sur un SI sur la journée comment je fais ?</strong></p>



<p>Excellente question à laquelle je répondrai, nous sommes SysAdmin et donc nous avons l&rsquo;accréditation pour intervenir sur notre SI. Donc je n&rsquo;utiliserai pas PAM mais le système classique de mon compte utilisateur avec élévation de droit avec mon compte administrateur délégué ou super administrateur.</p>



<p class="has-text-align-center"><strong>Mon presta doit faire une montée de version de la solution applicative sur l&rsquo;un de nos serveurs pour la journée soit 7 heures de boulot. Comment tu réponds à ça Monsieur jesaistout ?</strong></p>



<p>J&rsquo;ai pour habitude de ne jamais laissé un prestataire intervenir seul sur mon SI ou un SI sous ma responsabilité. Donc je passe ma journée à surveiller d&rsquo;un coin de l&rsquo;œil ces actions. Et dans son cas, je me note de renouveler personnellement toutes les deux heures ça durée de vie. Généralement il n&rsquo;y a pas trop besoin car le prestataire est administrateur local du serveur mais certaines fois il est nécessaire de lui octroyer les droits d&rsquo;administrations du domaine (et ça, ça fait froid dans le dos et en dit long sur la topologie de la solution applicative&#8230;).</p>



<p>En complément, il en va de soi mais la tacite reconduction des renouvellements des TTLs et à bannir et encore une fois pas de TTL trop long par ne pas être emme**é toutes les deux minutes.</p>
</div></div></div>
</div></div></div>



<p></p>



<p>Bien je pense qu&rsquo;avec tout ça nous en savons assez pour passer à la pratique non ?</p>



<h2 class="wp-block-heading">Pratique</h2>



<h3 class="wp-block-heading">Installation</h3>



<p>Commençons par vérifier le niveau fonctionnel de notre forêt. Nous retrouvons la commande qui devient normalement un automatisme maintenant 🙂</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-9307cdc13f0dcaa88fb837c1ea2d0a1c"><code><strong>&gt; Get-ADForest</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>La preuve à l&rsquo;appui, ci-contre la preuve que pour l&rsquo;attribut ForestMode la valeur Windows2016Forest est présente.<br><br>Donc les prérequis sont atteints.<br><br>Néanmoins, je recommande un petit contrôle de santé de l&rsquo;AD par précaution et actions avant de poursuivre.</td><td><img decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_001_ADForestCheck.jpg" alt=""></td></tr></tbody></table></figure>



<p></p>



<p>Vérifions maintenant si la fonctionnalité est déjà présente ou non sur notre SI.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-8778877ba943af528e8366a29ae16896"><code><strong>&gt; Get-ADOptionalFeature -Filter "name -eq 'Privileged Access Management Feature'"</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Si la valeur de l&rsquo;attribut EnabledScopes est vide, la fonctionnalité n&rsquo;est pas déployée sur le système. Sinon ba elle l&rsquo;est déjà.<br>Evident Cap&rsquo;taine Obvious !</td><td><img decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_002_CheckFonctionnality-1024x174.jpg" alt=""></td></tr></tbody></table></figure>



<p></p>



<p>Activons alors cette fonctionnalité.</p>



<p class="has-text-align-center"><strong><span style="text-decoration: underline;"><mark style="background-color:rgba(0, 0, 0, 0);color:#fe0000" class="has-inline-color">/!\</mark></span>Attention :</strong> C&rsquo;est à ce moment que l&rsquo;opération devient irréversible. Et deuxième point de vigilance il faut que nous soyons administrateur du schéma temporairement</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-78803b1ab0a9692af268118c413ff224"><code><strong>&gt; Enable-ADOptionalFeature 'Privileged Access Management Feature' -Scope ForestOrConfigurationSet -Target ronelab.lan</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_003_AddFonctionnality-1024x89.jpg" alt=""></td><td>Il suffira de valider le déploiement en activant la touche <strong>T</strong> pour <strong>oui pour tout</strong>. Et quelques secondes plus tard, c&rsquo;est terminé.<br><br>Oui tous ces mots pour ça&#8230; Il faut bien faire durer le plaisir non ? &lt;3</td></tr></tbody></table></figure>



<p></p>



<p>Si nous voulons vraiment valider le bon déploiement de notre fonctionnalité, nous pouvons rappeler la seconde commande ci-haut pour vérifier les paramètres d&rsquo;activation de notre scope.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="160" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_004_EnabledFonctionnality-1024x160.jpg" alt="" class="wp-image-3346" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_004_EnabledFonctionnality-1024x160.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_004_EnabledFonctionnality-300x47.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_004_EnabledFonctionnality-768x120.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_004_EnabledFonctionnality.jpg 1252w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Nous constatons donc que cette dernière n&rsquo;est plus vide ou $null. Nous pourrions également aller nous balader dans la configuration de notre AD pour trouver notre container.</p>



<p>Place à l&rsquo;assignation temporaire des droits 🙂</p>



<h3 class="wp-block-heading">Attribution temporaire</h3>



<p class="has-text-align-center"><strong>Bhin alors comment qui font qu&rsquo;on fait pour assigner des droits temporaires ? </strong></p>



<p>De la manière la plus simple du monde gazier, même si au passage il faudrait parler un langage au minima courant plutôt que familier.</p>



<p>Pour se faire, un compte admin et un accès à l&rsquo;un de nos DCs en powershell (où au DC en lui même). Je proscris volontairement les RSATs. Pourquoi ? Parce qu&rsquo;un DC doit être le plus isolé possible.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-1c923a27fe61de6a2dc967008764a833"><code><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color"># Définir notre TTL en secondes en tant que variable de type Timespan</mark>
&gt; $ttl=New-TimeSpan -Hours 1 -Minutes 15
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color"># Ajouter notre utilisateur temporairement au groupe</mark>
&gt; Add-ADGroupMember -Identity "GGS_PAM_AdminDomain_Elevation" -Members "john.doe" -MemberTimeToLive $ttl</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Et c&rsquo;est tout. Je vous l&rsquo;avais dit, rien de bien difficile. Un peu de RTFM et de ligne de commande&#8230;<br><br>Ce qui est intéressant c&rsquo;est de s&rsquo;attarder sur les événements de sécurité. Nous retrouvons avec exactitude ce que nous avons énoncé dans la partie théorie concernant le périmètre d&rsquo;audit.</td><td><img loading="lazy" decoding="async" width="550" height="261" class="wp-image-3359" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_006_addMembers.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_006_addMembers.jpg 1882w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_006_addMembers-300x142.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_006_addMembers-1024x485.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_006_addMembers-768x364.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_006_addMembers-1536x728.jpg 1536w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<p>Ouai mais alors comment vérifier que notre utilisateur à bien des droits qui court dans le temps ?</p>



<h3 class="wp-block-heading">Vérifications et Analyses</h3>



<p>Soyons un peu curieux et penchons nous dans les attributs de notre objets utilisateurs, groupe d&rsquo;élévation (auquel appartient notre utilisateur) et notre groupe final.</p>



<p class="has-text-align-center"><strong><a href="https://www.youtube.com/results?search_query=surprise">No Surprise ! Il n&rsquo;y a rien ! </a></strong></p>



<p>Etonnant non ? 🙂 J&rsquo;ai été surpris et j&rsquo;ai donc reparcouru la documentation en long, large diagonale&#8230; Pourquoi pouvons nous obtenir l&rsquo;information en powershell (oups j&rsquo;ai divulgâché la suite) et pas en GUI ?</p>



<p>C&rsquo;est là que c&rsquo;est malin. La durée de vie se trouve sur le lien entre l&rsquo;objet utilisateur et le groupe d&rsquo;appartenance (rien sur le groupe cible ce qui est logique). </p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-f4169ec1ae36bdfa3fe430d3a55bfd0a"><code><strong>&gt; Get-ADGroup -Filter * -Properties members -ShowMemberTimeToLive | Where-Object {$_.members -match "TTL*"}</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="873" height="198" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_008_checkAdd.jpg" alt="" class="wp-image-3361" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_008_checkAdd.jpg 873w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_008_checkAdd-300x68.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_008_checkAdd-768x174.jpg 768w" sizes="auto, (max-width: 873px) 100vw, 873px" /></figure>



<p>Et donc côté Kerberos qu&rsquo;est ce qui se passe ? La documentation en parle et nous invite à être vigilant sur ces événements (4768 et 4769). Naturellement comme tout ajout à un groupe, il est nécessaire de fermer et d&rsquo;ouvrir de nouveau la session pour prendre en compte le changement.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-bf6cc03e4a8c61ccf265ca581bcd015c"><code><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">#Dans le contexte de l'utilisateur</mark>
&gt; klist</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Nous pouvons donc constater (modulo mon temps d&rsquo;ouverture de session) que notre TGT<sup data-fn="4e769c23-6a40-4b39-bca0-bf97eef5f8f9" class="fn"><a href="#4e769c23-6a40-4b39-bca0-bf97eef5f8f9" id="4e769c23-6a40-4b39-bca0-bf97eef5f8f9-link">20</a></sup> à une durée de 1h11 / 1h15. Ce qui correspond à la durée définit dans notre délégation.<br>Une fois le temps imparti passé, le ticket sera renouvelé et donc les droits temporaires d&rsquo;administrations retirés.</td><td><img decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_009_klistTGT.jpg" alt="" style="width: 550px;"></td></tr></tbody></table></figure>



<p></p>



<p class="has-text-align-center"><strong>Et alors côté journaux d&rsquo;événements qu&rsquo;elles sont les nouvelles ma sœur Anne (#BARBEBLEU) ?</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Barbebleue.jpg/500px-Barbebleue.jpg" alt="" style="width:252px;height:auto"/></figure>
</div>


<p>J&rsquo;ai envie de dire il suffit de parcourir les journaux d&rsquo;évènement de sécurité.</p>


<div class="kb-gallery-wrap-id-3327_481d40-e1 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-slider kb-gallery-id-3327_481d40-e1 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-fade="true" data-slider-dots="true" data-slider-type="slider" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-slider splide__list"><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_1_AddGroupe.jpg" width="565" height="599" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_1_AddGroupe.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_1_AddGroupe.jpg" data-id="3367" class="wp-image-3367 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_1_AddGroupe.jpg 565w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_1_AddGroupe-283x300.jpg 283w" sizes="auto, (max-width: 565px) 100vw, 565px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_2_PrivilegeSpeciaux.jpg" width="575" height="566" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_2_PrivilegeSpeciaux.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_2_PrivilegeSpeciaux.jpg" data-id="3368" class="wp-image-3368 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_2_PrivilegeSpeciaux.jpg 575w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_2_PrivilegeSpeciaux-300x295.jpg 300w" sizes="auto, (max-width: 575px) 100vw, 575px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_3_TGT.jpg" width="566" height="653" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_3_TGT.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_3_TGT.jpg" data-id="3369" class="wp-image-3369 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_3_TGT.jpg 566w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_3_TGT-260x300.jpg 260w" sizes="auto, (max-width: 566px) 100vw, 566px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_4_opensession.jpg" width="570" height="653" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_4_opensession.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_4_opensession.jpg" data-id="3370" class="wp-image-3370 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_4_opensession.jpg 570w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_4_opensession-262x300.jpg 262w" sizes="auto, (max-width: 570px) 100vw, 570px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p></p>



<p>Bon par contre ne nous cachons pas c&rsquo;est un peu pénible pour ne pas dire casse-cou***e de taper les requêtes powershell. Il faut définir le TTL, connaitre les SAMs des utilisateurs, connaitre les groupes. Bref, source d&rsquo;erreur à gogo. Alors à votre avis en tant que fainéant qu&rsquo;ais je bien pu faire ? 🙂</p>



<h2 class="wp-block-heading">Applications</h2>



<p>Oui, cela peut paraitre étrange, mais j&rsquo;ai réalisé une application GRAPHIQUE. Un jour à marquer dans les calendriers <a href="https://www.youtube.com/shorts/VaZ8991q4kY">FOR SURE</a> d&rsquo;une bière blanche !</p>



<p>J&rsquo;ai commencé à faire l&rsquo;outil en PS CLI, mais j&rsquo;ai vite trouvé que cela n&rsquo;était pas ergonomique. Alors je me suis demandé pourquoi ne pas réaliser une application en VB.NET ? Flemme monstrueuse. Puis pourquoi pas reprendre une frustration passé du GUI en powershell ?</p>



<p>Hé bien voilà, que je réouvre une vieille blessure et alors quel pied put**n ! Je me suis éclaté.</p>



<p>Bon il reste quelques points à améliorer :</p>



<ul class="wp-block-list">
<li>Multitâche pour retourner les valeurs de l&rsquo;AD</li>



<li>Ajouter des petites icones sympas</li>



<li>Ajouter un petit About (j&rsquo;ai droit à mes droits d&rsquo;auteur)</li>



<li>Publier l&rsquo;application en certifiant cette dernière</li>



<li>Quelques contrôles d&rsquo;erreurs ? :p</li>
</ul>



<p>Bref pas mal de petite chose mais rien de bien méchant.</p>



<h3 class="wp-block-heading">Démonstration</h3>



<p class="has-text-align-center">Rien de telle qu&rsquo;une petite démonstration en images successives pour comprendre, aussi appelé vidéo.</p>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="WIN   ADDS &amp; Temporary Group Membership" width="720" height="405" src="https://www.youtube.com/embed/oaW9DOBak-w?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h3 class="wp-block-heading">Github</h3>



<p class="has-text-align-center"><a href="https://github.com/EGuillemard/GS_001-WIN_ADDS_TGM.git">Miaou</a></p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Je mettais attaqué à ce morceau en ne pensant à la base ne pas y consacrer autant de temps. Je me suis rendu compte une nouvelle fois que ce sont les choses les plus simples qui requiert davantage de recul et de réflexion.</p>



<p>Je lutte encore entre les bonnes pratiques et recommandations contre mon usage et le périmètre d&rsquo;applicabilité. Dans un certaine mesure <a href="https://www.youtube.com/watch?v=9K-T6h84F7k&amp;list=RD9K-T6h84F7k&amp;start_radio=1">PAM, PAM, PAM je me mettrai bien une cartouche</a> pour ne pas avoir connu plus tôt cette fonctionnalité. Bref, il est nécessaire d&rsquo;étudier avec sérieux son implémentation et son usage.</p>



<p>Je n&rsquo;ai volontairement pas abordé le système de délégation des droits AD et sur les GPOs. Mais cela reste un impondérable car tout va reposer sur cette base. Ouvrir d&rsquo;un côté pour mieux fermer de l&rsquo;autre, dilemme cornélien que la sécurité. Et honnêtement si j&rsquo;avais traité ce point, l&rsquo;article serait insoutenable (comme la poitrine de <a href="https://www.youtube.com/watch?v=KjxVQZ-3upU&amp;list=RDKjxVQZ-3upU&amp;start_radio=1">PAMELA dans Alerte à Malibu</a> ; Franchement tu devais la faire celle-là espèce de 90tard, tu ne pouvais pas t&rsquo;en empêcher ?).</p>



<p>Je suis conscient qu&rsquo;il reste des axes d&rsquo;améliorations (notamment sur le code). Toutefois, je pense que si suite il doit y avoir cela plus sur PIM ce qui ouvrira la voie vers l&rsquo;environnement Azure.</p>



<p>Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Si je PAM sur PAMELLA ? J&rsquo;offre un CADEAU en infogérance ? Malheureusement vous ne pouvez pas Jean-Pat il y a une « couille dehors » en diagonale. Vous retournez en case magouille. Un partout PAM au centre&#8230;</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://learn.microsoft.com/fr-fr/windows-server/get-started/whats-new-in-windows-server-2016#security-and-assurance">Microsoft : Fonctionnalités WS 2k16</a></li>



<li><a href="https://learn.microsoft.com/fr-fr/microsoft-identity-manager/pam/privileged-identity-management-for-active-directory-domain-services">Microsoft : PAM</a></li>



<li><a href="https://learn.microsoft.com/fr-fr/openspecs/windows_protocols/ms-adsc/5e4a3007-10de-479e-b0a4-3a96271e2640">Microsoft : Class ShadowPrincipal</a></li>



<li><a href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adsc/3ebfa3c1-ad62-4930-852d-2fdc26f72de2">Microsoft : Class Container ShadowPrincipal</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="ec10b2ae-5ea1-491a-a70e-30a705e606ba"><strong>PAM :</strong> Privilege Access Manager <a href="#ec10b2ae-5ea1-491a-a70e-30a705e606ba-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="44bed6e4-dd83-4e4d-a36d-3d5b0d5e1df7"><strong>PIM :</strong> Privilege Identity Manager <a href="#44bed6e4-dd83-4e4d-a36d-3d5b0d5e1df7-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="a7f26285-202f-4abc-8fbe-495c821aa98b"><strong>ZTNA :</strong> Zero Trust Network Access <a href="#a7f26285-202f-4abc-8fbe-495c821aa98b-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="8172a65b-8801-4743-896d-7be205dc4dea"><strong>TGM :</strong> Temporary Group Membership <a href="#8172a65b-8801-4743-896d-7be205dc4dea-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="329a3ad9-bad6-4ee9-8018-4f04b6a0ce09"><strong>ADDS :</strong> Active Directory Domain Service <a href="#329a3ad9-bad6-4ee9-8018-4f04b6a0ce09-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="66200fbf-59c4-4470-8c5f-4a5d63bd91a8"><strong>AAD :</strong> Azure Active Directory <a href="#66200fbf-59c4-4470-8c5f-4a5d63bd91a8-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="b2c40b43-9f6f-4d0d-9f38-135df62b4c9b"><strong>SI :</strong> Système d&rsquo;Information <a href="#b2c40b43-9f6f-4d0d-9f38-135df62b4c9b-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="1b7dbd0d-2d64-4802-83f8-a9c929f472c5"><strong>ANSSI :</strong> Agence Nationale de Sécurité des Systèmes d&rsquo;Informations <a href="#1b7dbd0d-2d64-4802-83f8-a9c929f472c5-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="4efd3a4f-04e4-49de-8f24-1f8166178ee7"><strong>SID :</strong> Security IDentifier <a href="#4efd3a4f-04e4-49de-8f24-1f8166178ee7-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="190798aa-1ac2-44b6-be35-e16ee5e894f0"><strong>AD :</strong> Active Directory <a href="#190798aa-1ac2-44b6-be35-e16ee5e894f0-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="e6bbd41f-636e-49b9-ac13-b18007210b46"><strong>TTL :</strong> TimeToLive <a href="#e6bbd41f-636e-49b9-ac13-b18007210b46-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="e9681cdd-0dac-4c25-a6dd-b2b28e9fe052"><strong>MIM :</strong> Microsoft Inditity Manager <a href="#e9681cdd-0dac-4c25-a6dd-b2b28e9fe052-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="504a3fd7-1971-42ff-a3b1-99c39c72cfbc"><strong>PIM :</strong> Privileged Identity Manager <a href="#504a3fd7-1971-42ff-a3b1-99c39c72cfbc-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="a7416798-8244-4996-ba17-b6cb7ce255a7"><strong>SIEM :</strong> Security Information Event Management <a href="#a7416798-8244-4996-ba17-b6cb7ce255a7-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="8aee950a-5f95-41a2-9837-c95f7eddccdb"><strong>SOC :</strong> Security Operation Center  <a href="#8aee950a-5f95-41a2-9837-c95f7eddccdb-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="ddad7c45-1971-48e1-9703-8ed11530de1c"><strong>DC :</strong> Domain Controler <a href="#ddad7c45-1971-48e1-9703-8ed11530de1c-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="fb1718ee-484f-4432-9238-67b667dc952c"><strong>ADCS :</strong> Active Directory Certificates Services <a href="#fb1718ee-484f-4432-9238-67b667dc952c-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="0ec485fd-eeb7-4b54-9765-4384bec2f735"><strong>ADFS :</strong> Active Directory Federation Services <a href="#0ec485fd-eeb7-4b54-9765-4384bec2f735-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li><li id="cd2a7bfd-1365-4cfa-876f-ba0c2c749e01"><strong>GGS :</strong> Groupe Global de Sécurité <a href="#cd2a7bfd-1365-4cfa-876f-ba0c2c749e01-link" aria-label="Aller à la note de bas de page 19">↩︎</a></li><li id="4e769c23-6a40-4b39-bca0-bf97eef5f8f9"><strong>TGT :</strong> Ticket Granting Ticket <a href="#4e769c23-6a40-4b39-bca0-bf97eef5f8f9-link" aria-label="Aller à la note de bas de page 20">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Dream Nebula, VMWare KPI Partie 3 : Démonstration</title>
		<link>https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-3-demonstration/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Fri, 06 Feb 2026 10:39:59 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[VEEAMONE]]></category>
		<category><![CDATA[VMWare]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3389</guid>

					<description><![CDATA[Partie 2 : Pratique&#60;- PROJET &#8211; Dream Nebula]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="PROJET   Dream Nebula, VMWare KPI" width="720" height="405" src="https://www.youtube.com/embed/B7MJ5z-jees?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-1-theorie/">Partie 2 : Pratique<br>&lt;-</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi/">PROJET &#8211; Dream Nebula</a></td><td class="has-text-align-center" data-align="center"></td></tr></tbody></table></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; PostgreSQL</title>
		<link>https://erwanguillemard.com/apps-postgresql/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Wed, 05 Nov 2025 21:26:00 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[BDD]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3247</guid>

					<description><![CDATA[Après les otaries, toujours dans le contexte des animaux je vais me déplacer latéralement vers l&#8217;enclos des éléphants. Alors non je ne vais pas abandonner MariaDB. Ce billet simple et efficace traitera de la SGBD PostgreSQL. Le pourquoi de cet intérêt soudain se justifie par la rupture technologique de nombreux éditeurs du marché vers ce...]]></description>
										<content:encoded><![CDATA[
<p>Après les otaries, toujours dans le contexte des animaux je vais me déplacer latéralement vers l&rsquo;enclos des éléphants.</p>



<p>Alors non je ne vais pas abandonner MariaDB. Ce billet simple et efficace traitera de la SGBD<sup data-fn="b793e32b-66d6-49b2-ab53-f36b018298f1" class="fn"><a href="#b793e32b-66d6-49b2-ab53-f36b018298f1" id="b793e32b-66d6-49b2-ab53-f36b018298f1-link">1</a></sup> PostgreSQL. Le pourquoi de cet intérêt soudain se justifie par la rupture technologique de nombreux éditeurs du marché vers ce moteur puissant. Ne nous voilons pas la face, ce jour les grands acteurs de BDDs<sup data-fn="393e6df6-2f56-48e8-9d39-7a0fdfff1fe2" class="fn"><a href="#393e6df6-2f56-48e8-9d39-7a0fdfff1fe2" id="393e6df6-2f56-48e8-9d39-7a0fdfff1fe2-link">2</a></sup> proposent des versions communautaires qui sont limités en termes de volumétrie et de fonctionnalité. Pour jouir de l&rsquo;ensemble des fonctionnalités il faut passer à la caisse.</p>



<p class="has-text-align-center"><strong>$$$ Bonjour le bandit manchot $$$</strong></p>



<p>Les bases de données étant de plus en plus volumineuse et l&rsquo;évolution que nous utilisateurs nous en faisons facilite auprès de ces mêmes éditeurs la mise à jour de leurs tarifications. C&rsquo;est de bonne guerre (ou pas). Ce « <strong>ou pas</strong> » laisse donc la voie à d&rsquo;autres alternatives. Plus simple, moins complexes et parfois plus puissante en s&rsquo;alignant sur le principe de la philosophie OpenSource.</p>



<p class="has-text-align-center"><strong>Je laisse une version communautaire, tu passes à la caisse si tu veux un service d&rsquo;assistance ou de maintenance. </strong></p>



<p class="has-text-align-left">Il y aura toujours chez certains éditeurs quelques fonctionnalités en moins. Toutefois, je pense que c&rsquo;est dans cette approche et la bonne et je réfléchis à adopter le même principe dans un projet de vie d&rsquo;une plus grande dimension.</p>



<p>Bref, après cette <a href="https://www.youtube.com/watch?v=k7U4EfFltX4&amp;list=RDk7U4EfFltX4&amp;start_radio=1">marche de l&rsquo;éléphant</a> (sans prendre de LSD<sup data-fn="400bfed0-8737-41bd-8083-b5ec5af14458" class="fn"><a href="#400bfed0-8737-41bd-8083-b5ec5af14458" id="400bfed0-8737-41bd-8083-b5ec5af14458-link">3</a></sup> ou autres acides). Je me fais un petit guide sur PostreSQL 🙂</p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p>Il me semble important une nouvelle fois de préciser que ce billet portera sur le déploiement d&rsquo;un environnement PostgreSQL dans sa dernière version stable à ce jour (release 18 en ce mois de grace Octobre 2025). Sur Windows, le déploiement ne m&rsquo;intéresse pas des masses. Par contre sur un système GNU/LINUX, j&rsquo;écris un <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color"><strong><em><span style="text-decoration: underline;">OUI</span></em></strong> </mark>majuscule (gras, italique, souligné rouge !).</p>



<p>Bien que les chiffres ne soient pas réellement suivis, PostgreSQL estime la part d&rsquo;environnement de production d&rsquo;environ (<a href="https://www.postgresql.org/community/survey/50-what-operating-system-is-your-primarylargest-production-postgresql-database-running-on">lien</a>) :</p>



<ul class="wp-block-list">
<li>52 % l&rsquo;usage sur les systèmes GNU/LINUX</li>



<li>23% l&rsquo;usage sur les systèmes Windows</li>
</ul>



<p>La raison de mon choix est que nous retrouvons un grand nombre d&rsquo;appliance qui utilise PostgreSQL dans des environnements GNU/UNIX. Donc en tant que SysAdmin il faut bien savoir se positionner 🙂 (franchement, quelle remarque de me*de&#8230;).</p>



<p>Je considère que l&rsquo;environnement sera durci selon les recommandations de l&rsquo;ANSSI<sup data-fn="172c5b99-4041-4446-85b6-d02e927f1b6e" class="fn"><a href="#172c5b99-4041-4446-85b6-d02e927f1b6e" id="172c5b99-4041-4446-85b6-d02e927f1b6e-link">4</a></sup> concernant les systèmes GNU/LINUX et comme d&rsquo;accoutumé, je pars sur ma distribution RHEL favorite RockyLinux.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>
<ul class="wp-block-list">
<li>Rocky Linux 9.4 et version ultérieures</li>
</ul>
</li>



<li><strong>Apps :&nbsp;</strong>
<ul class="wp-block-list">
<li>PostgreSQL 18.4</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>Non applicable</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<p>L&rsquo;implémentation d&rsquo;un SGBD passe forcément par une réflexion de sa topologie. Nous ne balançons pas une application 1-tiers, on essaie à minima d&rsquo;adopter une architecture 2-Tiers. Soit 1 serveur Frontend et 1 serveur Backend.</p>



<p>Pour des raisons qui sont évidentes (enfonçage de porte ouverte) une application publiée ne doit pas héberger la BDD. L&rsquo;application doit être en DMZ<sup data-fn="146573c3-30d5-479a-b375-824245002261" class="fn"><a href="#146573c3-30d5-479a-b375-824245002261" id="146573c3-30d5-479a-b375-824245002261-link">5</a></sup> et la BDD dans une autres bulles avec un contrôle des flux entrants et sortants interlans.</p>



<p class="has-text-align-center"><strong>M&rsquo;sieur? Et pour l&rsquo;identification des flux ? Pour l&rsquo;attribution des ressources ? Comment on fait ?</strong></p>



<p>Donnez moi un <strong>R</strong>, un <strong>T</strong>, un <strong>F</strong> et un <strong>M</strong>&#8230; <strong>RTFM</strong><sup data-fn="8cf51c44-be31-4dbd-91c3-7dfca8006d40" class="fn"><a href="#8cf51c44-be31-4dbd-91c3-7dfca8006d40" id="8cf51c44-be31-4dbd-91c3-7dfca8006d40-link">6</a></sup> ! Il suffit encore une fois d&rsquo;avoir le courage de se palucher le wiki de l&rsquo;éditeur applicatif. Un peu d&rsquo;huile de coude n&rsquo;a jamais fait de mal.</p>



<p>Une fois la topologie bien pensée, passons à l&rsquo;architecture de notre serveur BDD.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Comme tout SGBD déployé il convient au minima d&rsquo;implémenter la topologie ci-contre. Soit, un disque dédié au système UNIQUEMENT. Un disque dédié au stockage des données de notre SGBD et en dernier lieu un disque dédié au dump de nos BDDs avec une périodicité définie.<br><br>J&rsquo;ajouterai également un quatrième disque quant aux journaux de la BDDs et les journaux de transaction (les fameux transaction logs). Toutefois, ayant une petite infrastructure, je m&rsquo;octroie le luxe de laisser ces derniers dans le /var/log.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="408" class="wp-image-3251" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_001_Macro.jpg" alt=""></td></tr></tbody></table></figure>



<p></p>



<h4 class="wp-block-heading">Hardware Requirements</h4>



<p>Niveau des ressources là c&rsquo;est une autre histoire&#8230; Si la documentation officielle nous communique les ressources et interopérabilités avec les dépendances tierces, je n&rsquo;ai malheureusement pas trouvé d&rsquo;informations sur les ressources matérielles. Dans un sens logique car cela va dépendre de ce que nous souhaitons traiter comme données etc.</p>



<p>J&rsquo;ai donc décidé d&rsquo;appliquer de mon plein gré et non sous la contrainte de calquer les recommandations MariaDB (<a href="https://mariadb.com/docs/analytics/mariadb-columnstore/management/deployment/columnstore-minimum-hardware-specification">lien</a>). Toutefois, cela fait un peu beaucoup pour moi&#8230;</p>



<p>Je partirai donc pour un minimum <strong>2 vCPU</strong> et <strong>4 Gio</strong> de <strong>RAM</strong>. Dans l&rsquo;idéal, je serai je pense sur du <strong>4 vCPU</strong> et <strong>8 Gio</strong> de RAM. Comme écrit plus haut, tout dépendra de ce que notre application va consommer en termes de traitement. Il faudra alors <em>raisonner en bon père de famille</em> (spéciale dédicasse) et ajuster les ressources afin d&rsquo;éviter la sur ou sous allocation.</p>



<p>Côté réseau, la documentation nous indique que le port <strong>5432/tcp</strong> est le port de communication par défaut. Surprise, nous pouvons changer le port dans le fichier de configuration&#8230;</p>



<p>Je pense qu&rsquo;avec le peu de base énoncée, nous pouvons passer à la pratique.</p>



<h2 class="wp-block-heading">Pratique</h2>



<p>Un dernier point pour faire une magnifique transition entre la théorie et cette partie. Il est à noter que les dépôts officiels des distributions contiennent une version de la solution PostgreSQL. Toutefois, il ne s&rsquo;agit généralement pas de la dernière version. Il est recommandé d&rsquo;ajouter le dépôt de l&rsquo;éditeur et de ne pas utiliser le dépôt système pour PostgreSQL.</p>



<h3 class="wp-block-heading">Installation</h3>



<p>Franchement, je trouve là la démarche super-mega overcool de proposer un webwizard pour définir comment déployer PostgreSQL selon les différents OS<sup data-fn="93299765-13f1-4d26-b6e1-157c6dc967ca" class="fn"><a href="#93299765-13f1-4d26-b6e1-157c6dc967ca" id="93299765-13f1-4d26-b6e1-157c6dc967ca-link">7</a></sup> et distributions (nous noterons au passage un excellent usage de la figure de style hyperbolique) (<a href="https://www.postgresql.org/download/">lien</a>).</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" src="https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard-1024x559.jpg" alt="" class="wp-image-3252" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard-1024x559.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard-300x164.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard-768x419.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard.jpg 1523w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Je ne vais pas copier bêtement le script proposé. Mais reprendre chacune des lignes. Ce que je trouve admirable, c&rsquo;est la simplicité du déploiement. Pas besoin d&rsquo;installer 10k de dépendance en amont et de configurer ces dernières. </p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3247_4a47c7-b1 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3247_9174dd-7e"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Ajout du repo</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>A partir du lien fournit par le webwizard installer le nouveau repo :</p>



<p></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-3e11edfbd187fc3db365a2de1d87c0a8"><code>$ sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="374" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-1024x374.jpg" alt="" class="wp-image-3256" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-1024x374.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-300x110.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-768x281.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-1536x562.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO.jpg 1898w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3247_e9b6fd-28"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; Désactivation du package de la source de distribution</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Comme indiqué précédemment, il convient de désactiver la version de postgreSQL contenu dans le repo par défaut. Ainsi, nous aurons une plus grande flexibilité dans le choix de version de nos composants.</p>



<p>A noter que mon système étant durci j&rsquo;ai été contrait de réaliser l&rsquo;opération en tant que root.</p>



<p></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-70f2c5674e9fe72800367c1d4d6a77f2"><code># dnf -qy module disable postgresql</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="867" height="611" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_002_Install_REPO.jpg" alt="" class="wp-image-3258" style="width:597px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_002_Install_REPO.jpg 867w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_002_Install_REPO-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_002_Install_REPO-768x541.jpg 768w" sizes="auto, (max-width: 867px) 100vw, 867px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3247_ded978-9c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; Installation du Server PostgreSQL</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Rien de plus simple, il suffit de faire une petite recherche par précaution puis une installation de notre package.</p>



<p></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-2e80e318489950533c87033c0281a6a3"><code># dnf search postgresql18-server
# dnf install postgresql18-server</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="224" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-1024x224.jpg" alt="" class="wp-image-3259" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-1024x224.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-300x66.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-768x168.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-1536x336.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO.jpg 1904w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3247_998fe7-16"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; Initialisation et démarrage</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Comme tous SGBDs, il convient d&rsquo;initier la première installation. Puis de s&rsquo;assurer que le service va être lancer automatiquement au démarrage du système en cas de reboot.</p>



<p>Pour conclure, le traditionnel démarrage de notre daemon.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-4a134f820aa2ee375752bbdba91dcb4e"><code># /usr/pgsql-18/bin/postgresql-18-setup initdb
# systemctl enable postgresql-18
# systemctl start postgresql-18</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="89" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO-1024x89.jpg" alt="" class="wp-image-3260" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO-1024x89.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO-300x26.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO-768x67.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO.jpg 1432w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Pour le fun, une petite vérification 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="368" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO-1024x368.jpg" alt="" class="wp-image-3261" style="width:665px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO-1024x368.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO-300x108.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO-768x276.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO.jpg 1512w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div></div>
</div></div></div>



<p></p>



<p>Notre daemon PostgreSQL étant déployé, j&rsquo;arrive toujours à ce point d&rsquo;application des bonnes pratiques systèmes. C&rsquo;est là que ça peut être délicat si on se plante dans la configuration car cela peut mener à repartir de zéro. D&rsquo;où l&rsquo;importance de lire la documentation encore une fois.</p>



<p class="has-text-align-center"><a href="https://www.youtube.com/watch?v=B4WJk2G9g38">C&rsquo;est qu&rsquo;un éléphant ça trompe énormément !</a></p>



<p>Et voilà comment on casse tout 😀</p>



<h3 class="wp-block-heading">Déplacement de la BDD Location</h3>



<p>Si nous gardons la topologie mis en place ci-haut, il sera nécessaire de déplacer le répertoire data stocké sur <strong>/var/lib/pgsql/18/data</strong> vers notre répertoire <strong>/mnt/database/postgresql/data</strong> monté sur notre disque <strong>/dev/sdb</strong>.</p>



<p>Je ne vais pas mentir, je me suis pris les pieds dans le tapis une fois et j&rsquo;ai dû restaurer ma VM. Toutefois, les étapes ci-dessous sont bien éprouvées et valide.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3247_981a8d-b1 kt-accordion-has-6-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3247_3b8c7b-15"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Arret du service</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>La base de la base est donc d&rsquo;arrêter le service postgresql :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-1f8706e1f6978715559ed7a91ef7839e"><code>$ sudo systemctl stop postgresql-18.service
$ sudo systemctl status postgresql-18.service</code></pre>



<p>Il est primordiale de s&rsquo;assurer que le service ne tourne plus.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3247_bca34b-7a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; Création de l&rsquo;architecture cible</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Sur notre partition <strong>/dev/sdb1</strong> préalablement configurée et montée sur <strong>/mnt/database</strong>, nous allons créer et définir les droits et permissions pour autoriser notre compte postgres à accéder à ce dernier.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-447885826fb32d8410dc80fb0c19add8"><code>$ sudo mkdir /mnt/database/postgresql
$ sudo mkdir /mnt/database/postgresql/pg_sock
$ sudo mkdir /mnt/database/postgresql/data
$ sudo chown postgres:postgres /mnt/database/postgresql
$ sudo chmod 755 /mnt/database
$ sudo chmod 700 -R /mnt/database/postgresql</code></pre>



<p>Mais alors pourquoi 700 ? La base de donnée ainsi que l&rsquo;ensemble des fichiers de ressources doivent être accessible uniquement de l&rsquo;application par sécurité.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3247_ecd500-37"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; Déplacement des données</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Comme j&rsquo;ai pris l&rsquo;habitude de faire comme pour MariaDB, je vais copier le contenu du répertoire data puis renommer la source afin d&rsquo;éviter tous dysfonctionnements.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d167a86f4bff37aaedd56d0ad0b28f24"><code>$ sudo rsync -av /var/lib/pgsql/18/data/ /mnt/database/postgresql/data/
$sudo mv /var/lib/pgsql/18/data /var/lib/pgsql/18/data.ori</code></pre>



<p>Une erreur classique lors de l&rsquo;usage de la commande rsync reste l&rsquo;oublie du <strong>/</strong>. Cela entrainera la copie du répertoire et non de son contenu uniquement. En gros, ça va bégayer dans les chemins (../postgresql/data/data/&#8230;).</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3247_9e61f4-e4"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; Modification de la configuration du service</strong> </span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Le service est configuré pour démarrer le daemon sous <strong>/var/lib/psql/18</strong>. Pour prendre en charge le nouveau chemin, il faut modifier ce dernier. La philosophie et de surcharger la configuration.</p>



<p>Créer le répertoire qui va contenir la surcharge de notre daemon psql :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-5799c527e76b3dd224841f47fcb9af5d"><code>$ sudo mkdir -p /etc/systemd/system/postgresql-18.service.d</code></pre>



<p>Créer un fichier de surcharge qui va contenir le chemin du répertoire data :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-c0124622492296520e59a54ef19baf65"><code>$ sudo tee /etc/systemd/system/postgresql-18.service.d/override.conf &gt; /dev/null &lt;&lt;'EOF'
<strong>&#91;Service]
Environment="PGDATA=/mnt/database/postgresql/data/"
EOF</strong></code></pre>



<p>Par acquis de conscience, j&rsquo;aime vérifier que le fichier est bien présent ainsi que le contenu de ce dernier.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-eea78f3bea8eda733c5558b86588ba7e"><code>$ sudo cat /etc/systemd/system/postgresql-18.service.d/override.conf</code></pre>



<p>Le daemon &lsquo;system&rsquo; a été altéré (puisque j&rsquo;ai ajouté une configuration) et donc ? Un petit reload des familles pour prendre en compte le changement et zou.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-647d939155d8cb9e3cad7b43f10ba049"><code>$ sudo systemctl daemon-reload</code></pre>



<p></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3247_cfaebc-a8"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>5 &#8211; SELinux</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Un étape un peu border avec la sécurité (comme un excès de Delirium un jeudi soir pour oublier une semaine compliqué).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="600" height="600" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_000_MoveData.png" alt="" class="wp-image-3270" style="width:180px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_000_MoveData.png 600w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_000_MoveData-300x300.png 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_000_MoveData-150x150.png 150w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure>
</div>


<p>Toutefois, il est important de noter un petit point et non des moindres sur notre fichier <strong>/etc/fstab.</strong> Il va être nécessaire d&rsquo;ajouter le contexte sur notre partition et de relabeliser notre point partition.</p>



<p>Editons le fichier avec VIM, VI ou NANO puis modifier la ligne comme ci-dessous en ajoutant au niveau des droits <strong><em>defaults,context=system_u:object_r:postgresql_db_t:s0</em></strong></p>



<p>Ce qui veut dire en SELinux :</p>



<ul class="wp-block-list">
<li><strong><em>Defaults :</em></strong> Activation des droits standards</li>



<li><strong><em>Context=</em></strong>
<ul class="wp-block-list">
<li><strong><em>system_u </em></strong>: Identité SELinux, sans impact concernant notre SGBD</li>



<li><strong><em>object_r </em></strong>: Rôle d&rsquo;objet de type fichier</li>



<li><strong><em>postgresql_db_t </em></strong>: Match avec le type de données PostgreSQL autorisé par SELinux. Ainsi, SELinux interdit à PostgreSQL d&rsquo;accéder à des fichiers qui ne sont pas dans le contexte.</li>



<li><strong><em>s0 </em></strong>: Le niveau de sécurité par défaut.</li>
</ul>
</li>
</ul>



<p>Il sera nécessaire de définir le bon contexte sur notre nouveau répertoire.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-61e8cef06eef9a02ab603be7b4d7da6e"><code>$ sudo semanage fcontext -a -t postgresql_db_t "/mnt/database/postgresql(/.*)?"
$ sudo restorecon -Rv /mnt/database/postgresql/</code></pre>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3247_000ea0-1b"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>6 &#8211; Démarrage du service</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Le moment de vérité.</p>



<p class="has-text-align-center"><strong>Vais je vomir l&rsquo;ensemble de mes bières et commander une nouvelle tournée pour noyer mon échec ou commander une nouvelle tournée pour célébrer le succès de cette opération ? 🙂</strong></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d8b07f4b785f3f155bdcd6b81f7a6b46"><code>$ sudo systemctl start postgresql-18
$ sudo systemctl status postgresql-18</code></pre>



<p></p>
</div></div></div>
</div></div></div>



<p></p>



<p>Il faut noter que le service fonctionne. Néanmoins, il convient de se demander si nous pouvons requêter notre BDD à la suite de ce changement.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-8ac2a6e23ab32c55e977a18495a997d8"><code>$ sudo -u postgres psql -c "SELECT version();"</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="605" height="134" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_001_MoveData.jpg" alt="" class="wp-image-3271" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_001_MoveData.jpg 605w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_001_MoveData-300x66.jpg 300w" sizes="auto, (max-width: 605px) 100vw, 605px" /></figure>
</div>


<p>Vérifions également que le chemin du PGDATA a bien été pris en compte.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-9b56dcd5448d18c407b282c364d85d41"><code>$ sudo -u postgres psql -c "SHOW data_directory;"</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="605" height="94" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_002_MoveData.jpg" alt="" class="wp-image-3272" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_002_MoveData.jpg 605w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_002_MoveData-300x47.jpg 300w" sizes="auto, (max-width: 605px) 100vw, 605px" /></figure>
</div>


<p class="has-text-align-center">Ouf ça fonctionne 🙂</p>



<p>Place à l&rsquo;étape suivante ! <a href="https://www.youtube.com/watch?v=zRcRtpgox0U">BA-BA-BAR POM POM POM POM</a></p>



<h3 class="wp-block-heading">Sécurisation &amp; Configuration</h3>



<p>Nous revenons encore et toujours au même point. Qui dit données implique la sensibilité de ces dernières. Aujourd&rsquo;hui braquer une banque ne rapporte pas grand-chose. Le rapport bénéfices/risques n&rsquo;est pas bon&#8230; Mais braqué des données, utiliser ces dernières et les revendre apporte un bien meilleur rapport en termes de bénéfices / risques.</p>



<p>Donc, je me retrousse les manches car je ne suis pas un manche !</p>



<p>Si du côté <strong>MariaDB</strong> il existe le fameux <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">mysql_secure_installation</mark>, ce n&rsquo;est malheureusement pas le cas chez <strong>PostgreSQL</strong>.</p>



<p>Il se pose alors de dresser un inventaire rapide des points que nous souhaitons sécuriser :</p>



<ol class="wp-block-list">
<li>Mot de passe du compte postgres</li>



<li>Restreindre l&rsquo;accès réseaux</li>



<li>Mettre en place une stratégie d&rsquo;authentification</li>



<li>Utiliser des algorithmes de chiffrement fort</li>



<li>Supprimer les BDDs inutiles</li>



<li>Droits sur les fichiers</li>



<li>SELinux</li>



<li>Firewall embarqué (même si je préfère le terme embedded)</li>



<li>Audit et Journaux d&rsquo;événements</li>
</ol>



<p>Ca fait une petite tripoté n&rsquo;est-il pas ? Naturellement, certains des points ci-haut ont déjà été traité lors du déploiement et du changement d&#8217;emplacement de la base de données.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3247_ac7a8e-1e kt-accordion-has-9-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3247_c547cc-2a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Password Account DB </strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Comme pour MariaDB (compte root), l&rsquo;utilisateur postgres ne possède pas de mot de passe. Il convient par sécurité de définir ce dernier afin qu&rsquo;il ne vienne une idée à un individu malveillant (comme un RSSI <sup data-fn="8ee11f8e-018a-4440-a1e7-f35e89fcaa7d" class="fn"><a href="#8ee11f8e-018a-4440-a1e7-f35e89fcaa7d" id="8ee11f8e-018a-4440-a1e7-f35e89fcaa7d-link">8</a></sup>lors d&rsquo;un audit ou pire un SysDBA<sup data-fn="d3ddcc3d-b108-4e68-9df7-2f478eb4d83d" class="fn"><a href="#d3ddcc3d-b108-4e68-9df7-2f478eb4d83d" id="d3ddcc3d-b108-4e68-9df7-2f478eb4d83d-link">9</a></sup>) de mettre sa truffe humide dans notre BDD.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-206bf12b018f671dfb5a3a5538e74534"><code>$ su - postgres
$ psql -c "alter user postgres with password '<strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">MyP@ssw0rd</mark></strong>'"</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="181" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user-1024x181.jpg" alt="" class="wp-image-3276" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user-1024x181.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user-300x53.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user-768x135.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user.jpg 1435w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Il est important de faire un petit <strong><em>clear de l&rsquo;historique</em></strong> de frappe. Un mot de passe en clair c&rsquo;est pas cool. </p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3247_7f1d29-93"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; Network Restrictions</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Ouvrons le fichier de configuration <strong>/mnt/database/postgresql/data/postgresql.conf</strong>.</p>



<p>Attention comme indiqué précédemment, il faudra être authentifié en tant qu&rsquo;utilisateur postgres ou root.</p>



<p class="has-text-align-center">Recherchez la section CONNECTIONS AND AUTHENTIFICATION.</p>



<p>Se pose alors la question, depuis où je peux consulter ma BDDs et sur quel port ? Personnellement, le port je le laisse par défaut soit 5432/tcp. Toutefois, la source, il est bien de spécifier le subnet ou les adresses IPs qui sont autorisé à se connecter à notre SGBD. Naturellement, la valeur &lsquo;*&rsquo; est proscrite.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="903" height="295" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SecurNetRestriction.jpg" alt="" class="wp-image-3285" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SecurNetRestriction.jpg 903w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SecurNetRestriction-300x98.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SecurNetRestriction-768x251.jpg 768w" sizes="auto, (max-width: 903px) 100vw, 903px" /></figure>
</div>


<p>Ce paramétrage va de pair avec la configuration de notre UTM<sup data-fn="5b9359c6-adcf-4f72-9501-604602846dc7" class="fn"><a href="#5b9359c6-adcf-4f72-9501-604602846dc7" id="5b9359c6-adcf-4f72-9501-604602846dc7-link">10</a></sup> embedded (cf le point plus bas).</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3247_0e912b-42"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; Authentification Policies</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>On va changer de fichier. L&rsquo;objectif est de définir <strong>qui</strong> va se connecter à <strong>quoi</strong>, <strong>comment</strong> et depuis<strong> où</strong>.</p>



<p>Direction <strong>/mnt/database/postgresql/data/pg_hba.conf</strong></p>



<p>La logique de lecture est la suivante TYPE correspond à la nature de l&rsquo;authentification (local? hôte ?) pour quelle DATABASE (all ? replication ? db_test ?) pour quel USER (all ? r-one ?) depuis quelle ADDRESS (127.0.0.1/32 ? 0.0.0.0/0 ? 10.36.16.0/24 ?) et par quel METHOD (peer ? scram-sha-256? MD5?).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="865" height="465" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SECU_postgres_authmethod.jpg" alt="" class="wp-image-3277" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SECU_postgres_authmethod.jpg 865w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SECU_postgres_authmethod-300x161.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SECU_postgres_authmethod-768x413.jpg 768w" sizes="auto, (max-width: 865px) 100vw, 865px" /></figure>
</div>


<p>Il est certain qu&rsquo;il faut limiter l&rsquo;usage au maximum du all comme du masque 0.0.0.0/0. Toutefois, il n&rsquo;y a pas de base les paramètres « implicites » de refus des connexions. C&rsquo;est donc à implémenter (dernières lignes de la capture d&rsquo;écran).</p>



<p>On sauvegarde, puis on reload le service.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-04f92932758700a31ff7c7cf90098ec9"><code>$ sudo systemctl reload postgresql-18</code></pre>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3247_28b64d-f5"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; Suite de chiffrement</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Toujours dans le fichier de configuration <strong>/mnt/database/postgresql/data/postgresql.conf</strong>. Attention comme indiqué précédemment, il faudra être authentifié en tant qu&rsquo;utilisateur postgres ou root.</p>



<p>Recherchez la section CONNECTIONS AND AUTHENTIFICATION et activez l&rsquo;algorithme de chiffrement <strong>scram-sha-256</strong>. Le <strong>MD5</strong>, nous passons notre tour hein ? Autant allez aux champignons sans capotes, c&rsquo;est du pareil au même.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="861" height="124" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_004_SecurAlgo.jpg" alt="" class="wp-image-3284" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_004_SecurAlgo.jpg 861w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_004_SecurAlgo-300x43.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_004_SecurAlgo-768x111.jpg 768w" sizes="auto, (max-width: 861px) 100vw, 861px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3247_398349-d5"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>5 &#8211; Nettoyage des BDDs inutiles</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Il est important de lister les bases présentes sur notre SGBD et de supprimer les bases qui ne servent à rien.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d747d17bea2ce23c46de4de55c118af6"><code>$ su - postgres  -c "\l"
$ psql

postgres=#\l
postgres=# DROP DATABASE NAME_BDD;</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="300" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD-1024x300.jpg" alt="" class="wp-image-3283" style="width:672px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD-1024x300.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD-300x88.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD-768x225.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD.jpg 1278w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Attention : Il ne faut en aucun cas supprimer les bases template0 et template1. Ces dernières permettent (pour la 1) de générer les futurs BDDs) et (pour la 0) de regénérer la BDD de modèle.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3247_3f7584-a2"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>6 &#8211; Permissions et ACLs</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Comme expliqué ci haut et pour des raisons évidentes. L&rsquo;accès aux données doivent être accessible uniquement du compte utilisateur postgres et root. Pas de quoi foutez milles éléphants&#8230;</p>



<p>Je glisse toutefois les commandes.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-ec0a5579650dc9a16dc8cbd6a240b2aa"><code>$ sudo chown -R postgres:postgres /mnt/database/postgresql/data
$ sudo chmod 700 /mnt/database/postgresql/data</code></pre>



<p></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-7 kt-pane3247_596968-8b"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>7 &#8211; SELinux &lt;3</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Nous retrouvons la commande saisie ci-haut si nous avons modifié le database location.</p>



<p>Ainsi nous définissons le contexte de fichier de type <strong>postgresql_db_t </strong>à l&rsquo;ensemble des éléments qui sont situer sous <strong>/mnt/database/postgresql</strong>. Puis on restore le contexte.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-61e8cef06eef9a02ab603be7b4d7da6e"><code>$ sudo semanage fcontext -a -t postgresql_db_t "/mnt/database/postgresql(/.*)?"
$ sudo restorecon -Rv /mnt/database/postgresql/</code></pre>



<p></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-8 kt-pane3247_481508-49"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>8 &#8211; Firewall</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Avant c&rsquo;était iptables maintenant c&rsquo;est firewalld ou ufw. Personnellement je reste sur la configuration de firewalld.</p>



<p>Il convient d&rsquo;autoriser les flux 5432/tcp dans notre firewall si des connexions se font depuis un autre réseau ou une autre machine.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-f3a79338853f5457c41683c309df7089"><code>$ sudo firewall-cmd --permanent --add-service=postgresql
$ sudo firewall-cmd --reload</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="916" height="104" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_008_SecurFirewall.jpg" alt="" class="wp-image-3278" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_008_SecurFirewall.jpg 916w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_008_SecurFirewall-300x34.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_008_SecurFirewall-768x87.jpg 768w" sizes="auto, (max-width: 916px) 100vw, 916px" /></figure>
</div>


<p>Cela étant, il serait également plus précis de filtrer les connexions entrantes sur un réseau ou une adresse ip uniquement sur le port 5432/tcp.</p>



<p>J&rsquo;assume cette configuration du fait de mon UTM en amont qui filtre l&rsquo;ensemble des flux inter-lans.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-9 kt-pane3247_2ab698-4d"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>9 &#8211; Logs &amp; Audits</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Ouvrons le fichier de configuration <strong>/mnt/database/postgresql/data/postgresql.conf</strong>. Attention comme indiqué précédemment, il faudra être authentifié en tant qu&rsquo;utilisateur postgres ou root.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-363e1d6b3d3216113e190e6c29ea0d2b"><code># vim /mnt/database/postgresql/data/postgresql.conf</code></pre>



<p>Se rendre ensuite dans la section REPORTING AND LOGGING. Puis vérifiez que la configuration suivante est active.</p>



<p></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Activation de <strong>logging_collector</strong> sur <strong>on</strong> afin de récupérer les erreurs sous la forme json ou csv.<br><br>L&#8217;emplacement où va être stocké les journaux. Par défaut celui-ci se trouve dans le répertoire log. Il faudra renseigner si l&#8217;emplacement est différent le chemin absolu, le chemin relatif si c&rsquo;est un cluster.<br><strong>log_directory = &lsquo;log&rsquo;</strong><br><br>Le nom du fichier, par défaut ce dernier est sous le format <strong>postgresql-%Y-%m-%d_%H%M%S.log</strong>.<br><strong>log_filename = &lsquo;postgresql-%a.log&rsquo;</strong><br><br>Activer la journalisation pour l&rsquo;ensemble des événements de connexion et de déconnexion.<br><strong>log_connections = on<br>log_disconnections = on</strong><br><br>En guise de traitement des logs, nous choisirons ddl pour avoir les définitions des commandes utilisés. Attention, l&rsquo;usage de all peut être dangereux vis à vis des ressources.<br><strong>log_statement = &lsquo;ddl&rsquo;</strong></td><td><img loading="lazy" decoding="async" width="550" height="598" class="wp-image-3279" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_009_LogAudits.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_009_LogAudits.jpg 607w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_009_LogAudits-276x300.jpg 276w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<p></p>



<p>Une fois les modifications apportées, n&rsquo;oubliez pas que notre serveur PostgreSQL à besoin d&rsquo;être redémarré :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-98dfa67952528c695eccdaeed06c0a5c"><code>$ sudo systemctl restart postgresql-18</code></pre>



<p>Pour une configuration spécifique comme la gestion de la mémoire allouée, les fonctionnalités et j&rsquo;en passe. Je pense qu&rsquo;il est inutile d&rsquo;aborder cela dans ce billet.</p>



<p>Pourquoi ? Parce que cet aspect-là et intrinsèquement lié aux dépendances des applications qui nécessite le SGBD PostgreSQL.</p>



<h3 class="wp-block-heading">Premiers Pas</h3>



<p>Cette sous partie vise plus à entrevoir les commandes de bases pour instancier une BDD dans le cadre de déploiement d&rsquo;une application (spoiler Odoo par exemple ?).</p>



<p>Je n&rsquo;ai pas la prétention de réinventer la roue, il existe la documentation pour cela et je n&rsquo;ai pas non plus la prétention de devenir SysDBA. J&rsquo;ai juste envie de faire les choses bien et surtout en suivant la doctrine des 3S, Simple, Standard et Sécurisé (14 ans d&rsquo;ESN<sup data-fn="d2a363b8-1043-4f02-8054-3cb17bef0b81" class="fn"><a href="#d2a363b8-1043-4f02-8054-3cb17bef0b81" id="d2a363b8-1043-4f02-8054-3cb17bef0b81-link">11</a></sup> ça vous forge un homme !).</p>



<h4 class="wp-block-heading">Création d&rsquo;un user</h4>



<p>La création d&rsquo;un utilisateur suit un paradigme différent de MariaDB. La finesse de l&rsquo;application du contexte d&rsquo;un utilisateur se fera dans le fichier <strong>pg_hba.conf</strong>.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-00badcfad096e143c66e3e97bb28621c"><code>$ psql -U postgres

postgres=# CREATE USER user_odoo WITH PASSWORD 'MyPassw0rd';</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="789" height="74" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_001_pgsql_createuser.jpg" alt="" class="wp-image-3308" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_001_pgsql_createuser.jpg 789w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_001_pgsql_createuser-300x28.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_001_pgsql_createuser-768x72.jpg 768w" sizes="auto, (max-width: 789px) 100vw, 789px" /></figure>
</div>


<h4 class="wp-block-heading">Création d&rsquo;une BDD</h4>



<p>La création d&rsquo;une BDD nécessite qu&rsquo;un utilisateur (de la SGBD naturellement) ait le privilège <strong>CREATEDB</strong> ou d&rsquo;utiliser un compte <strong>super utilisateur</strong>. Cela parait logique mais pas pour tout le monde. La documentation nous rappelle que la création d&rsquo;une nouvelle base de données sera effectué en réalisant un clone de la BDD template1 (si, le truc qui ne fallait pas supprimer).</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-db61721f40e581d497a6d2a796b33b2f"><code>postgres=# CREATE DATABASE bdd_odoo;</code></pre>



<p>Toutefois, nous pouvons allez plus loin en définissant le propriétaire de la BDD, le jeu de caractère de la BDD ainsi que la collation locale afin de faciliter le tri des chaines. Par exemple :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d8ca2461b14d8ccc2be296cc60c4fc52"><code>postgres=# CREATE DATABASE bdd_odoo_18
			WITH OWNER user_odoo
			ENCODING 'UTF8'
			LC_COLLATE 'fr_FR.UTF-8'
			LC_CTYPE 'fr_FR.UTF-8'
			TEMPLATE template0;</code></pre>



<p class="has-text-align-center"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">/!\</mark> ARTUNG <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">/!\</mark> Bicyclette et petit vélo !</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Il n&rsquo;est pas impossible que vous tombiez sur une erreur de ce type « <em>invalid LC_COLLATE locale name</em>« . Cela signifie que tu vivras ta vie sans aucun soucis. (Tes vraiment sûre ?)<br>En gros, il manque le fichier de mappage de caractère au niveau système. Soit il n&rsquo;est pas présent, soit il n&rsquo;est pas généré.</td><td><img loading="lazy" decoding="async" width="550" height="182" class="wp-image-3309" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_002_pgsql_errorencodage.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_002_pgsql_errorencodage.jpg 617w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_002_pgsql_errorencodage-300x99.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<p>Afin de vérifier si ce dernier est présent :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-2129546e20ca91bc0ad4b0849350e583"><code>$ sudo locale -a | grep fr</code></pre>



<p>Si cela ne retourne rien c&rsquo;est que le packet ne doit pas être installé. Alors installons le vin diou !</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-3-background-color has-text-color has-background has-link-color wp-elements-0f16e386d4fd3cd8ec3758c328dc2098"><code>$ sudo dnf install glibc-langpack-fr
$ sudo locale -a | grep fr</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="868" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage-1024x868.jpg" alt="" class="wp-image-3310" style="width:722px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage-1024x868.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage-300x254.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage-768x651.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage.jpg 1033w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Surprise le fichier de mappage est présent ! Si nous rejouons la requête, cela fonctionne.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="281" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate-1024x281.jpg" alt="" class="wp-image-3311" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate-1024x281.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate-300x82.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate-768x211.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate.jpg 1466w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h4 class="wp-block-heading">Attribution des privilèges et rôles</h4>



<p>Comme tous systèmes de base de données, un incontournable reste la notion de rôle et de privilège. </p>



<p>Dans la pratique, il convient et je sais que j&rsquo;enfonce une porte ouverte d&rsquo;adopter la bonne pratique de créer des rôles et d&rsquo;affecter les rôles aux utilisateurs. Un rôle sur la BDD en modification, en lecture, superutilisateur ect. </p>



<p>Ainsi et c&rsquo;est d&rsquo;une logique implacable, si modification il doit avoir, je ne modifierai <span style="text-decoration: underline;"><strong>QUE</strong></span> le rôle et non utilisateur par utilisateur. MALINX le LYNX&#8230;</p>



<h5 class="wp-block-heading">Rôles</h5>



<p>Par défaut, nous retrouvons :</p>



<figure class="wp-block-table has-small-font-size"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center">SUPERUSER</td><td>Accès total à tout le serveur</td></tr><tr><td class="has-text-align-center" data-align="center">CREATEDB</td><td>Peut créer des bases de données</td></tr><tr><td class="has-text-align-center" data-align="center">CREATEROLE</td><td>Peut créer, modifier ou supprimer d&rsquo;autres rôles</td></tr><tr><td class="has-text-align-center" data-align="center">INHERIT</td><td>Hérite des privilèges des rôles dont il est membre (activé par défaut)</td></tr><tr><td class="has-text-align-center" data-align="center">LOGIN</td><td>Peut se connecter à PostgreSQL</td></tr><tr><td class="has-text-align-center" data-align="center">REPLICATION</td><td>Peut initier des connexions de réplication</td></tr><tr><td class="has-text-align-center" data-align="center">BYPASSRLS</td><td>Ignore les politiques de sécurité par lignes</td></tr></tbody></table></figure>



<p></p>



<p>Toujours dans le spoil (parce que <a href="https://www.youtube.com/watch?v=Txz9toiMFnE">je suis un mec underground moi. MOUMOUNIGAN !</a>) je vais créer un rôle pour ODOO qui permettra uniquement de se connecter, de créer une bdd avec un mot de passe.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d87a71f61879722c82d63d05166a54de"><code>postgres=# CREATE ROLE r_odoo LOGIN CREATEDB;</code></pre>



<p>Pour attribuer le rôle à un utilisateur (en prenant toujours le cas ODOO avec notre role r_odoo et user_odoo) :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-2b890c0dd8242c780f421a72dff43509"><code>postgres=# GRANT r_odoo TO user_odoo;</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="835" height="246" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_005_pgsql_grant.jpg" alt="" class="wp-image-3312" style="width:652px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_005_pgsql_grant.jpg 835w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_005_pgsql_grant-300x88.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_005_pgsql_grant-768x226.jpg 768w" sizes="auto, (max-width: 835px) 100vw, 835px" /></figure>
</div>


<h5 class="wp-block-heading">Privilèges</h5>



<p>La notion de privilèges que ce soit sur la BDD, les tables où les schémas suivent le principe de SQL. Ainsi il suffira d&rsquo;user des commandes GRANT accompagner de :</p>



<ul class="wp-block-list">
<li>CONNECT ON</li>



<li>USAGE</li>



<li>SELECT ON ALL</li>



<li>SELECT, INSERT, UPDATE, DELETE</li>



<li>ALTER</li>



<li>DROP</li>



<li>&#8230;</li>
</ul>



<p>Il est important de prendre en compte que le propriétaire de la BDD <span style="text-decoration: underline;"><strong>a tous les droits</strong></span>.</p>



<p>Toujours dans notre exemple ODOO, il n&rsquo;y aura donc pas de privilèges à appliquer.</p>



<h2 class="wp-block-heading">PostgreSQL Client</h2>



<p>Il existe un outil que j&rsquo;ai découvert à travers un case chez VEEAM pour un problème de protection O365 du nom de pgAdmin. Cette solution officielle est l&rsquo;outil graphique pour administrer PostrgreSQL.</p>



<p>Je pense important de présenter cette dernière car dans le cas où nous ne nous serions pas <strong><em>SQL native language</em></strong> ou <strong><em>seconde langue</em></strong>. Cela nous permettrait de bien comprendre certains dysfonctionnements ou structures.</p>



<p>L&rsquo;installation n&rsquo;est pas en soi bien complexe&#8230; Ma grand-mère y arriverait sans difficulté. Toutefois, je glisse le tips&#8230;</p>


<div class="kb-gallery-wrap-id-3247_8318b5-7d alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-3247_8318b5-7d kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin.jpg" width="526" height="415" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin.jpg" data-id="3294" class="wp-image-3294 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin.jpg 526w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin-300x237.jpg 300w" sizes="auto, (max-width: 526px) 100vw, 526px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin.jpg" width="520" height="412" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin.jpg" data-id="3295" class="wp-image-3295 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin.jpg 520w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin-300x238.jpg 300w" sizes="auto, (max-width: 520px) 100vw, 520px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin.jpg" width="523" height="412" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin.jpg" data-id="3296" class="wp-image-3296 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin.jpg 523w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin-300x236.jpg 300w" sizes="auto, (max-width: 523px) 100vw, 523px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin.jpg" width="522" height="413" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin.jpg" data-id="3297" class="wp-image-3297 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin.jpg 522w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin-300x237.jpg 300w" sizes="auto, (max-width: 522px) 100vw, 522px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin.jpg" width="524" height="413" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin.jpg" data-id="3298" class="wp-image-3298 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin.jpg 524w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin-300x236.jpg 300w" sizes="auto, (max-width: 524px) 100vw, 524px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin.jpg" width="522" height="410" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin.jpg" data-id="3299" class="wp-image-3299 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin.jpg 522w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin-300x236.jpg 300w" sizes="auto, (max-width: 522px) 100vw, 522px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin.jpg" width="520" height="411" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin.jpg" data-id="3300" class="wp-image-3300 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin.jpg 520w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin-300x237.jpg 300w" sizes="auto, (max-width: 520px) 100vw, 520px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin.jpg" width="783" height="626" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin.jpg" data-id="3301" class="wp-image-3301 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin.jpg 783w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin-300x240.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin-768x614.jpg 768w" sizes="auto, (max-width: 783px) 100vw, 783px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p>Certains pourrait dire, oui c&rsquo;est un PHPMyAdmin. Oui c&rsquo;est un fait. C&rsquo;est une IHM<sup data-fn="67016ea4-128a-4e54-8e78-994f2692832d" class="fn"><a href="#67016ea4-128a-4e54-8e78-994f2692832d" id="67016ea4-128a-4e54-8e78-994f2692832d-link">12</a></sup> en GUI<sup data-fn="91045dd7-1d19-4afb-9e40-c5064450683b" class="fn"><a href="#91045dd7-1d19-4afb-9e40-c5064450683b" id="91045dd7-1d19-4afb-9e40-c5064450683b-link">13</a></sup> pour faciliter l&rsquo;expérience quotidienne.</p>



<p>Pour se connecter, il suffira de renseigner les informations de connexion et de s&rsquo;assurer au préalable que la politique de communication est bien présente sur notre UTM concernant les flux interlans. Sans oublier de vérifier :</p>



<ul class="wp-block-list">
<li>La configuration du fichier pg_hba.conf est compliante</li>



<li>Les adresses d&rsquo;écoutes dans le fichier postgresql.conf ne sont pas restreinte cas localhost et que le bind d&rsquo;interface est bien configuré. (Le bind c&rsquo;est l&rsquo;ip de l&rsquo;interface du serveur, pas l&rsquo;adresse ip du client&#8230; Je dis ça parce que je vous vois venir hein !)</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="434" class="wp-image-3303" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_009_pgadmin_connexion.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_009_pgadmin_connexion.jpg 727w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_009_pgadmin_connexion-300x237.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="252" class="wp-image-3313" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion.jpg 1068w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion-300x137.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion-1024x469.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion-768x352.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /><br></td></tr></tbody></table></figure>



<p>Et si nous jetions un coup d&rsquo;œil dans le viseur pour observer nos logs voir si on voit notre <a href="https://www.youtube.com/watch?v=6xb898sQtu8&amp;list=RD6xb898sQtu8&amp;start_radio=1">pachyderm</a> numérique ?</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-5de0cdf00246c3c34a09d22a2381ba79"><code>$ sudo tail -f /mnt/database/postgresql/data/log/postgresql-Wed.log</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="161" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-1024x161.jpg" alt="" class="wp-image-3304" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-1024x161.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-300x47.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-768x121.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-1536x242.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion.jpg 1693w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Impeccable. Tout fonctionne 🙂</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Ce billet revient aux prémices des premiers articles rédigés il y a maintenant quasiment deux ans. Quelques choses de simple qui vise à jouer les aides mémoires de ma cafetière qui commence à s&rsquo;effriter.</p>



<p>Je ne tenais pas à me lancer dans un benchmark de « <em><strong>Est ce que l&rsquo;otarie et plus fort que l&rsquo;éléphant ?</strong></em> » cela ne m&rsquo;intéresse pas le moindre du monde. Toutefois et comme j&rsquo;ai pu l&rsquo;aborder en avant propos, le tournant des éditeurs vers la solution PostgreSQL mérite de s&rsquo;intéresser à cette dernière.</p>



<ul class="wp-block-list">
<li>VEEAM enchaine sa rupture technologique avec Windows (SE<sup data-fn="7604995b-87f0-4797-9ee8-4a7d54d21f02" class="fn"><a href="#7604995b-87f0-4797-9ee8-4a7d54d21f02" id="7604995b-87f0-4797-9ee8-4a7d54d21f02-link">14</a></sup> et/ou MSSQL) pour RHEL et PostgreSQL</li>



<li>ODOO qui reste dans la philosophie du libre</li>



<li>La Société Générale (faut bien renflouer les caisses après le passage de Jérôme KERVIEL&#8230; Ok, la blague est mauvaise, mais il fallait la faire. Trop tentante).</li>



<li>Patrick BALKANY pour gérer son patrimoine non déclaré. Ah non autant pour moi c&rsquo;est une fake news&#8230; Que je suis naïf 🙂</li>
</ul>



<p>Au delà des deux derniers points douteux, il est bien je pense de se garder deux SGBDs relationnels sous le coude les solutions MariaDB et PostgreSQL. L&rsquo;implémentation de la couche de sécurité relève d&rsquo;un défi parfois mais reste nécessaire et plus qu&rsquo;indispensable de nos jours.</p>



<p>Il manque toutefois un point que je n&rsquo;ai pas développé ici. La possibilité de sauvegarder une base de manière périodique. J&rsquo;avais traité le sujet pour MariaDB à la suite d&rsquo;une connerie de ma part un vendredi aprem sur l&rsquo;environnement de production. Je pense qu&rsquo;il serait bien de reprendre ce projet et de l&rsquo;adapter pour PostgreSQL 🙂</p>



<p>Ca fait un sujet supplémentaire à traiter d&rsquo;ici la fin d&rsquo;année. Mais surtout, le levé de voile ayant été fait un poil plus tôt ce billet est le tremplin pour l&rsquo;implémentation d&rsquo;ODOO comme mon ERP à venir.</p>



<p>Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Egaré dans la base de données infernale, le sysadmin se nomme R-ONE. A la recherche du datalocation, le problème s&rsquo;appelle la durcification. Avec la solution VEEAM, il a pu rollback super vite.</em> Dérivant à dos d&rsquo;éléphant<em>, R-ONE arrivera toujours dans l&rsquo;étang&#8230; (faut bien se mouiller un peu qu&rsquo;ils disaient les anciens)</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://www.postgresql.org/community/survey/50-what-operating-system-is-your-primarylargest-production-postgresql-database-running-on">PostgreSQL Secteur par OS</a></li>



<li><a href="https://www.postgresql.org/files/documentation/pdf/18/postgresql-18-A4.pdf">PostgreSQL &#8211; Main Apps Guide</a></li>



<li><a href="https://www.postgresql.org/download/">PostgreSQL &#8211; Download</a></li>



<li><a href="https://www.pgadmin.org/download/">PGAdmin &#8211; Download</a></li>



<li><a href="https://mariadb.com/docs/analytics/mariadb-columnstore/management/deployment/columnstore-minimum-hardware-specification">MariaDB &#8211; Hardware Requirements</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="b793e32b-66d6-49b2-ab53-f36b018298f1"><strong>SGBD :</strong> Système de Gestion de Base de Données <a href="#b793e32b-66d6-49b2-ab53-f36b018298f1-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="393e6df6-2f56-48e8-9d39-7a0fdfff1fe2"><strong>BDD : </strong>Base De Données <a href="#393e6df6-2f56-48e8-9d39-7a0fdfff1fe2-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="400bfed0-8737-41bd-8083-b5ec5af14458"><strong>LSD :</strong> <strong> </strong>LySergique Diéthylamide <a href="#400bfed0-8737-41bd-8083-b5ec5af14458-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="172c5b99-4041-4446-85b6-d02e927f1b6e"><strong>ANSSI</strong> <strong>:</strong> Agence Nationale de Sécurité des Systèmes d&rsquo;Informations <a href="#172c5b99-4041-4446-85b6-d02e927f1b6e-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="146573c3-30d5-479a-b375-824245002261"><strong>DMZ :</strong> Demilitarized Zone <a href="#146573c3-30d5-479a-b375-824245002261-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="8cf51c44-be31-4dbd-91c3-7dfca8006d40"><strong>RTFM :</strong> Read The Fuck*ng Manual <a href="#8cf51c44-be31-4dbd-91c3-7dfca8006d40-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="93299765-13f1-4d26-b6e1-157c6dc967ca"><strong>OS :</strong> Operating System <a href="#93299765-13f1-4d26-b6e1-157c6dc967ca-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="8ee11f8e-018a-4440-a1e7-f35e89fcaa7d"><strong>RSSI </strong>: Responsable Sécurité des Systèmes d&rsquo;Informations <a href="#8ee11f8e-018a-4440-a1e7-f35e89fcaa7d-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="d3ddcc3d-b108-4e68-9df7-2f478eb4d83d"><strong>SysDBA :</strong> Administrateur des Systèmes de Bases de Données <a href="#d3ddcc3d-b108-4e68-9df7-2f478eb4d83d-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="5b9359c6-adcf-4f72-9501-604602846dc7"><strong>UTM : </strong>Unified threat management <a href="#5b9359c6-adcf-4f72-9501-604602846dc7-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="d2a363b8-1043-4f02-8054-3cb17bef0b81"><strong>ESN :</strong> Entreprise des Services Numériques <a href="#d2a363b8-1043-4f02-8054-3cb17bef0b81-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="67016ea4-128a-4e54-8e78-994f2692832d"><strong>IHM :</strong> Interface Homme Machine <a href="#67016ea4-128a-4e54-8e78-994f2692832d-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="91045dd7-1d19-4afb-9e40-c5064450683b"><strong>GUI :</strong> Graphical User Interface <a href="#91045dd7-1d19-4afb-9e40-c5064450683b-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="7604995b-87f0-4797-9ee8-4a7d54d21f02"><strong>SE :</strong> Système d&rsquo;Exploitation <a href="#7604995b-87f0-4797-9ee8-4a7d54d21f02-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WIN – Password Policies &#038; Event 4740</title>
		<link>https://erwanguillemard.com/win-password-policies-monitoring/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sun, 05 Oct 2025 18:36:55 +0000</pubDate>
				<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Securité]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3190</guid>

					<description><![CDATA[Dans ce billet, j&#8217;avais envie d&#8217;enfoncer des portes ouvertes. Premièrement parce que je trouve facile de faire un billet sur quelque chose de « simple » et deuxièmement si je me dem***e bien je peux faire de l&#8217;audit avec un titre p*te-à-clic ! Plus sérieusement et sans détour, il se trouve que ce sont les choses les...]]></description>
										<content:encoded><![CDATA[
<p>Dans ce billet, j&rsquo;avais envie d&rsquo;enfoncer des portes ouvertes. Premièrement parce que je trouve facile de faire un billet sur quelque chose de « simple » et deuxièmement si je me dem***e bien je peux faire de l&rsquo;audit avec un titre p*te-à-clic !</p>



<p>Plus sérieusement et sans détour, il se trouve que ce sont les choses les plus simples dans la vie qui sont le plus souvent bâclées ou négligées. C&rsquo;est pourquoi je me suis dit, et si je m&rsquo;attardais un peu plus sur les politiques de mots de passe dans un environnement WINDOWS ?</p>



<p>Il relève de nombreux articles déjà sur le net qui traite ce sujet, mais voyez-vous encore une fois je pense aller un peu plus loin que les excellents articles déjà présents. Difficile de parler de ce que j&rsquo;ai fait sans toutefois présenter les bases 🙂</p>



<p class="has-text-align-center"><strong>Mais alors jusqu&rsquo;où es-tu allé cette fois ci ?</strong></p>



<p>Je suis parti de la politique classique de définition de la politique de mot de passe dans un domaine AD<sup data-fn="ee3df61f-a519-4425-8d3e-e24b9d4968ce" class="fn"><a href="#ee3df61f-a519-4425-8d3e-e24b9d4968ce" id="ee3df61f-a519-4425-8d3e-e24b9d4968ce-link">1</a></sup> et du traitement des événements de verrouillage de compte. Sujet traité par mon précédent mentor et qui m&rsquo;a demandé un peu de recherche pour arriver à mes fins (je voulais faire ma propre solution, comprendre et maitriser le sujet).</p>



<p>Bref, cela sera je le pense un petit billet avec du script, des schémas et naturellement du powershell avec une pointe de désinvolture et assurément de sécurité. </p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p>Comme rédigé légèrement plus tôt, je n&rsquo;ai pas la volonté de faire un article détaillé qui reprend la majorité des articles déjà présent sur le NET. Il me faut néanmoins une base de départ. </p>



<p>Mon mentor, dans le cadre d&rsquo;une esquisse de PSSI<sup data-fn="8a83b3e9-a47a-428b-8eba-109292ff90d3" class="fn"><a href="#8a83b3e9-a47a-428b-8eba-109292ff90d3" id="8a83b3e9-a47a-428b-8eba-109292ff90d3-link">2</a></sup> il y a un certain nombre d&rsquo;année c&rsquo;est dit qu&rsquo;il serait bien d&rsquo;informer l&rsquo;équipe du SI interne (ou externalisé) d&rsquo;un potentiel blocage, verrouillage de compte sur un AD. La première question que nous pourrions nous poser serait d&rsquo;abord quel cas pourrait entrainer un verrouillage d&rsquo;un compte ?</p>



<ul class="wp-block-list">
<li>Un dysfonctionnement de la couche 8 du modèle OSI<sup data-fn="c83eaf51-a4dd-41a4-bd7a-588ddcc4945b" class="fn"><a href="#c83eaf51-a4dd-41a4-bd7a-588ddcc4945b" id="c83eaf51-a4dd-41a4-bd7a-588ddcc4945b-link">3</a></sup> :
<ul class="wp-block-list">
<li>Je suis méchant avec cette couche, je sais bien. Nous parlons ici (ou plutôt je parle car cela n&rsquo;engage que ma responsabilité ET ma personne) du dysfonctionnement entre le siège du bureau et le clavier. Soit en un mot et un seul ? <strong>L&rsquo;utilisateur</strong> bien sûr !! Mais qu&rsquo;est ce que ce mec est condescendant&#8230; C&rsquo;est affligeant. Généralement, le verrouillage de compte est généré par une erreur de frape lors de la saisie et dans certains cas (compte non nominatif utilisé par plusieurs collaborateurs) de la saisie d&rsquo;un mauvais mot de passe.</li>
</ul>
</li>



<li>Une tentative de Charlie qui veut « poutrer » le compte de Bob pour récupérer le cœur d&rsquo;Alice
<ul class="wp-block-list">
<li>On comprend assez aisément le brute force d&rsquo;un intru pour s&rsquo;infiltrer dans le SI<sup data-fn="b2669417-059d-4c69-984f-1d328949f770" class="fn"><a href="#b2669417-059d-4c69-984f-1d328949f770" id="b2669417-059d-4c69-984f-1d328949f770-link">4</a></sup> est tout casser&#8230;</li>
</ul>
</li>



<li>Un dysfonctionnement de la couche 7 du modèle OSI :
<ul class="wp-block-list">
<li>Oui celle-là existe officiellement et concerne la couche applicative :). Je ne peux pas non plus raconter <a href="https://www.youtube.com/watch?v=wPmn9_FQKXs">des conneries en permanence</a> tout de même. Pour faire simple une application a des informations qui ne sont pas à jour (un client de messagerie qui pete un plomb par exemple).</li>
</ul>
</li>
</ul>



<p>Donc l&rsquo;intérêt de notifier l&rsquo;équipe interne ? S&rsquo;assurer que notre utilisateur ne veut pas s&rsquo;octroyer une pause-café supplémentaire ou que nous avons un petit malin dans la place qui veut nous faire passer nos prochains jours à la première place de l&rsquo;enfer dans le plus beau des <a href="https://fr.m.wikipedia.org/wiki/Fichier:John_Martin_Le_Pandemonium_Louvre.JPG">pandémoniums</a> &lt;3</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="676" src="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_001_pandemonium-1024x676.jpg" alt="" class="wp-image-3194" style="width:670px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_001_pandemonium-1024x676.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_001_pandemonium-300x198.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_001_pandemonium-768x507.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_001_pandemonium-1536x1013.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_001_pandemonium-2048x1351.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Mon côté brun ténébreux qui ressort avec les vilains corbeaux de Sir Alan Edgar Poe&#8230; Alors comment faire pour déceler un verrouillage de compte et comment notifier les équipes ? Spoiler ? La suite dans les parties ci-dessous.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>&nbsp;
<ul class="wp-block-list">
<li>Windows Server 2k16 et version ultérieures</li>
</ul>
</li>



<li><strong>Apps :&nbsp;</strong>
<ul class="wp-block-list">
<li>Rôle ADDS</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>PowerShell version 5 et supérieure</li>



<li>SMTP</li>



<li>Domaine AD</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<p>Avant de commencer, posons nous la question de comment fonctionne l&rsquo;authentification dans poste dans une domaine (pour faire simple, nous restons dans une forêt avec un seul domaine).</p>



<h3 class="wp-block-heading">Authentification, comment ça marche ?</h3>



<p>En tous lieux, je dirai avec des chaussures&#8230; Ok, je sors&#8230;</p>



<p>Nous pourrions résumer le cycle de vie de l&rsquo;authentification en 7 étapes (encore la magie du nombre 7&#8230;) l&rsquo;authentification d&rsquo;un utilisateur.</p>



<ol class="wp-block-list">
<li><strong>Saisie des identifiants login et mot de passe</strong>
<ul class="wp-block-list">
<li>Rien de bien sorcier, CONTOSO\John.Doe et mon superpassword (si tenter que le mot de passe soit bien celui attendu dans l&rsquo;AD pour l&rsquo;utilisateur John DOE&#8230;</li>
</ul>
</li>



<li><strong>Localisation du DC via DNS</strong>
<ul class="wp-block-list">
<li>Notre poste va alors à travers l&rsquo;enregistrement DNS<sup data-fn="18e69ed2-abc8-46a5-a20d-72f7eb983f95" class="fn"><a href="#18e69ed2-abc8-46a5-a20d-72f7eb983f95" id="18e69ed2-abc8-46a5-a20d-72f7eb983f95-link">5</a></sup> <strong><em>_ldap._tcp.dc._msdcs.contoso.x</em></strong> pour trouver un DC<sup data-fn="0721b4af-c255-4f7e-809c-b8c9286fd00d" class="fn"><a href="#0721b4af-c255-4f7e-809c-b8c9286fd00d" id="0721b4af-c255-4f7e-809c-b8c9286fd00d-link">6</a></sup> disponible</li>
</ul>
</li>



<li><strong>Négociation, KERBEROS ou NTLM ?</strong>
<ul class="wp-block-list">
<li>Deux mots protocoles qui peuvent faire peur. Je ne rentre pas dans le détail des deux protocoles. Gardons à l&rsquo;esprit toutefois que KERBEROS est supérieur au protocole NTLM<sup data-fn="4fcc112f-3418-4247-99c0-2a394beaf5ae" class="fn"><a href="#4fcc112f-3418-4247-99c0-2a394beaf5ae" id="4fcc112f-3418-4247-99c0-2a394beaf5ae-link">7</a></sup> (d&rsquo;ailleurs KERBEROS est utilisé comme protocole par défaut).</li>



<li><mark style="background-color:rgba(0, 0, 0, 0);color:#0074ff" class="has-inline-color">Cas de KERBEROS</mark>, le poste demande un TGT<sup data-fn="3e2a8bc8-2b61-4fd4-b3b4-db26e8c201c2" class="fn"><a href="#3e2a8bc8-2b61-4fd4-b3b4-db26e8c201c2" id="3e2a8bc8-2b61-4fd4-b3b4-db26e8c201c2-link">8</a></sup> auprès du KDC<sup data-fn="3f2db1e6-f957-433a-a801-b23ae4ea333f" class="fn"><a href="#3f2db1e6-f957-433a-a801-b23ae4ea333f" id="3f2db1e6-f957-433a-a801-b23ae4ea333f-link">9</a></sup> du DC à travers une requête. Si le couple d&rsquo;authentification saisie est correct le KDC retournera en réponse le TGT chiffré ainsi qu&rsquo;une clé de session. Le poste à travers le TGT va demander un TGS<sup data-fn="b16e4796-0ae1-459e-91b3-49a78e1a49d6" class="fn"><a href="#b16e4796-0ae1-459e-91b3-49a78e1a49d6" id="b16e4796-0ae1-459e-91b3-49a78e1a49d6-link">10</a></sup> afin d&rsquo;accéder aux différentes ressources du SI (fichiers, imprimantes etc&#8230;).</li>



<li><mark style="background-color:rgba(0, 0, 0, 0);color:#0074ff" class="has-inline-color">Cas de NTLM</mark>, le poste va réaliser un challenge au DC en attendant une réponse.</li>
</ul>
</li>



<li><strong>Validation du compte</strong>
<ul class="wp-block-list">
<li>Une fois la négociation réussi (<a href="https://www.youtube.com/watch?v=jwIUJIfIEWo">Où est-ce qu&rsquo;il a appris à négocier ?</a>), le DC va vérifier le mot de passe haché, le compte doit être actif (soit pas verrouillé, expiré ou désactivé), récupérer les groupes de sécurité de l&rsquo;utilisateur ainsi que les stratégies de connexion et de mot de passe.</li>



<li>C&rsquo;est marrant, c&rsquo;est cette étape qui nous intéresse 🙂</li>
</ul>
</li>



<li><strong>Chargement du profil</strong>
<ul class="wp-block-list">
<li>Si la vérification du compte utilisateur est ok, alors c&rsquo;est réussi. <strong>HIGH FIVE !</strong> Le poste va alors charger le profil local ou selon la configuration un profil itinérant. Dans le pire des cas, un profil temporaire.</li>
</ul>
</li>



<li><strong>Application des GPO</strong>
<ul class="wp-block-list">
<li>Dans la logique, ensuite sont téléchargées et appliquées les GPO<sup data-fn="f45783de-eede-4502-9d26-843d9efb5a18" class="fn"><a href="#f45783de-eede-4502-9d26-843d9efb5a18" id="f45783de-eede-4502-9d26-843d9efb5a18-link">11</a></sup> utilisateurs, ordinateurs&#8230;</li>
</ul>
</li>



<li><strong>Ouverture de session</strong>
<ul class="wp-block-list">
<li>Hé nous voilà normalement sur notre bureau.</li>
</ul>
</li>
</ol>



<p>Bon j&rsquo;avoue que la partie négociation, j&rsquo;avais dit que je ne rentrerai pas dans le détail. J&rsquo;effleure la technicité et croyez moi, nous pourrions aller beaucoup plus loin. Toutefois, demander à vos Admins Systèmes et Réseaux ou Techniciens Systèmes et Réseaux, je ne suis pas certains qu&rsquo;ils vous expliquent clairement le cycle de vie d&rsquo;authentification d&rsquo;un utilisateur&#8230;</p>



<h3 class="wp-block-heading">Stratégie de mot de passe</h3>



<p>Avant de rentrer plus dans le détail de ce qui nous intéresse, il est important de parler de la stratégie de mot de passe. Cela s&rsquo;est plutôt bien démocratisé car nous retrouvons sur la grande majorité des sites web à ce jour le traditionnel message :</p>



<p>Votre mot de passe doit répondre aux critères minimaux ci-dessous :</p>



<ul class="wp-block-list">
<li>16 caractères minimum</li>



<li>1 Majuscule</li>



<li>1 Minuscule</li>



<li>1 caractère numérique</li>



<li>1 caractère spécifique</li>
</ul>



<p>Je vous vois déjà hurler, ou vos utilisateurs vous ont gueulé dessus&#8230; Quant à la politique mis en place. Mais alors que devons nous appliquer et à qui ? L&rsquo;objectif est de sécuriser les SIs sans pour autant être un vrai tyran avec ces utilisateurs. Gardons toujours à l&rsquo;esprit que « Trop de sécurité tue la sécurité ». A quoi bon exiger 26 caractères pour retrouver le mot de passe sur un post-it ou <strong>AZERTY123456AZERTY123456azerty123456azerty123456$</strong>&#8230;</p>



<p>Pour cela, j&rsquo;aime me référer à l&rsquo;ANSSI<sup data-fn="bfa3d65a-4536-4421-a219-6600a3b2a55b" class="fn"><a href="#bfa3d65a-4536-4421-a219-6600a3b2a55b" id="bfa3d65a-4536-4421-a219-6600a3b2a55b-link">12</a></sup> comme ça je peux dire haut et fort, « C&rsquo;est pas moi, c&rsquo;est eux qui veulent. » 🙂 Je suis courageux n&rsquo;est ce pas ? 🙂</p>



<p>Dans le guide de Recommandation relatives à l&rsquo;authentification multi-facteurs et aux mots de passe, il est recommandé d&rsquo;appliquer la politique de mot de passe suivante (R20):</p>



<ul class="wp-block-list">
<li>Catégorie des mots de passe</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Longueur des mots de passe</mark> (<mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">Entre 9 et 11, c&rsquo;est faible</mark>. <mark style="background-color:rgba(0, 0, 0, 0);color:#ff9c00" class="has-inline-color">Entre 12 et 14 c&rsquo;est moyen</mark>. <mark style="background-color:rgba(0, 0, 0, 0);color:#6dd826" class="has-inline-color">Au-delà de 15 c&rsquo;est fort</mark>)</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Règles de complexité des mots de passe</mark> (le nombre de caractère utilisable)</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Délais d&rsquo;expiration des mots de passe</mark> (la fréquence de renouvellement)</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Mécanisme de limitation d&rsquo;essais d&rsquo;authentification</mark></li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Mécanisme de contrôle de la robustesse des mots de passe</mark></li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Méthode de conservation des mots de passe</mark></li>



<li>Méthode de recouvrement d&rsquo;accès en cas de perte ou de vol des mots de passe</li>



<li>Mise à disposition d&rsquo;un coffre-fort de mot de passe</li>
</ul>



<p>Dans notre cas, seuls les points en vert nous intéressent. Pour définir techniquement notre GPO ou notre FGPP. </p>



<p class="has-text-align-center"><strong><em>D&rsquo;où tu dis que je suis un FDP ?! Gros Tarba va ! Je vais&#8230;.</em></strong> </p>



<p class="has-text-align-left">STOP ! En aucun cas je vous insulte ! FGPP<sup data-fn="e9521bc3-b710-4c91-bf97-8570fc3d067b" class="fn"><a href="#e9521bc3-b710-4c91-bf97-8570fc3d067b" id="e9521bc3-b710-4c91-bf97-8570fc3d067b-link">13</a></sup> ou Fine Grained Password Policy permettent de manière plus simple de définir plusieurs politiques de mots de passe dans une organisation selon les services et criticité de ces derniers. Croyez-moi, c&rsquo;est bien plus simple que la gestion par GPO. Ca nous le verrons rapidement dans la pratique quant au déploiement.</p>



<p class="has-text-align-left">Dans tous les cas, j&rsquo;aime définir la stratégie de mot de passe « par défaut » dans la GPO (vous pouvez me jeter des petits cailloux au visage et du sable dans les yeux), Default Domain Policy : HERESIE ! BLASPHEME ! AU BUCHET ! (Oui ba c&rsquo;est bien la seule chose que je modifie dans la Default Domain Policy) :</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="273" src="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_002_DefaultDomainPolicy-1024x273.jpg" alt="" class="wp-image-3201" style="width:705px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_002_DefaultDomainPolicy-1024x273.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_002_DefaultDomainPolicy-300x80.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_002_DefaultDomainPolicy-768x205.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_002_DefaultDomainPolicy.jpg 1494w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>J&rsquo;ouvre un aparté, dans le cas d&rsquo;un poste hors domaine que nous souhaiterions durcir, il suffira de faire de même. Il faut que je pose la question de scripter cela. Aparté fermée.</p>



<p>J&rsquo;ai donc une politique de mots de passe qui s&rsquo;appliquent (sans verrouillage de compte) par défaut pour l&rsquo;ensemble des utilisateurs de mon parc, de mon domaine. Néanmoins, je vais définir par FGPP une politique par groupe utilisateur.</p>



<p>Dans ma logique, je choisie de faire trois politiques par défaut en respectant le tiering d&rsquo;administration des comptes utilisateurs. </p>



<p class="has-text-align-center">Administrateur du domaine &gt; Utilisateurs avec pouvoir &gt; Utilisateur du domaine</p>



<p>La puissance des FGPPs résident dans la possibilité de définir une pondération sur chaque politique. Ainsi, un utilisateur peut se retrouver avec une ou plusieurs politiques liées. Les politiques ne pouvant se cumuler, la politique avec la pondération la plus forte sera minoritaire par rapport à une politique avec une pondération plus faible.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="431" src="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_003_FGPP-1024x431.jpg" alt="" class="wp-image-3203" style="width:660px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_003_FGPP-1024x431.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_003_FGPP-300x126.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_003_FGPP-768x323.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_003_FGPP.jpg 1105w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>« Unbelievable » diraient nos voisins outre-manche ! Nous retrouvons les mêmes paramètres que dans notre GPO&#8230; A noter et point important, la FGPP vaut sur la GPO si cette dernière est lié à un utilisateur ou un groupe d&rsquo;utilisateur.</p>



<h3 class="wp-block-heading">Authentification &amp; events</h3>



<p>Pour bien comprendre le fonctionnement de l&rsquo;authentification, nous avons vu ci-haut que tout se passe sur nos DCs. Comme le système n&rsquo;est pas trop mal foutu (et qu&rsquo;accessoirement l&rsquo;authentification à un système relève de la plus grande criticité) tout est consigné dans les journaux d&rsquo;événements de sécurité. </p>



<p class="has-text-align-center"><strong>Elle est pas belle la vie ?</strong></p>



<p>Alors la question est la suivante, qu&rsquo;elle est ou plutôt qu&rsquo;elles sont les événements qui nous sont important ? Microsoft est vraiment sympa car ils ont pour nous <a href="https://learn.microsoft.com/fr-fr/windows-server/identity/ad-ds/plan/appendix-l--events-to-monitor">référencier les événements</a> à surveiller&#8230;</p>



<p><a href="https://www.youtube.com/watch?v=D85laB6j85U&amp;list=RDD85laB6j85U&amp;start_radio=1">Mon cœur cogne un truc esthétique</a> ! Vous voyez tout ce qu&rsquo;il est possible de faire en termes de sécurité et de suivi, gestion du SI ? Limite ça me fait ba**er. Je vais soumettre l&rsquo;ID d&rsquo;un nouveau projet au comité qui vie dans ma cafetière.</p>



<p>Dans notre cas, précis il y a deux événements qui nous intéressent :</p>



<ul class="wp-block-list">
<li><strong>4624 :</strong> Hérité des événements 528 et 540, je cite « L’ouverture de session d’un compte s’est correctement déroulée. »</li>



<li><strong>4740 :</strong> Hérité de l&rsquo;événements 644, je cite « Un compte d’utilisateur a été verrouillé. »</li>
</ul>



<p>Il est important de comprendre dans l&rsquo;annexe que la notion de criticité est celle qui remonte dans les journaux d&rsquo;événements. Personnellement certains événements pourraient être revu à la hausse. Enfin, c&rsquo;est mon opinion personnelle qui n&rsquo;a de crédit que pour le type qui écrit ces mots&#8230;</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="787" height="410" src="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_004_LogEvent.jpg" alt="" class="wp-image-3208" style="width:514px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_004_LogEvent.jpg 787w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_004_LogEvent-300x156.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_004_LogEvent-768x400.jpg 768w" sizes="auto, (max-width: 787px) 100vw, 787px" /></figure>
</div>


<p>C&rsquo;est donc dans le déclenchement de l&rsquo;évent <strong>4740</strong> que nous trouverons notre bonheur.</p>



<h2 class="wp-block-heading">Approche</h2>



<p>La question est comment récupérer l&rsquo;information que le compte d&rsquo;un utilisateur ou compte de service est verrouillé ? </p>



<h3 class="wp-block-heading">Consultation des objets</h3>



<p>Dans un premier temps, j&rsquo;ai pensé à scruter l&rsquo;état de chaque objet utilisateur ou ordinateur de l&rsquo;AD sur un intervalle définis dans le temps. </p>



<p>Le professeur rend les copies, et c&rsquo;est un 4/20 qui tombe&#8230; L&rsquo;idée peut paraitre bien, mais c&rsquo;est mauvais. Oui je vais avoir l&rsquo;information des comptes verrouillés, mais cela n&rsquo;est pas du tout optimisé, cela va charger pour rien le serveur et générer des lenteurs et niveau proactivité c&rsquo;est un zéro pointé. Imaginons si nous étions sur un SI avec genre 2k d&rsquo;objets dans l&rsquo;AD ? </p>



<h3 class="wp-block-heading">Consultation des évènements déclenchés</h3>



<p>La seconde approche consiste à définir une tache planifiée qui se déclenche sur un événement déclenché. Je l&rsquo;ai fait il y a peu pour contourner un dysfonctionnement non patché de MS, donc c&rsquo;est faisable. Mais je n&rsquo;aime pas cette méthode car elle ouvre une vieille blessure intellectuelle&#8230; Ce traumatisme tout bête me dite vous ? Comment retourner et transmettre un paramètre de l&rsquo;événement déclenché dans un script powershell&#8230; </p>



<p class="has-text-align-center"><em>Je peux vous dire qu&rsquo;en 2015 je me suis torturé l&rsquo;esprit à un point ou écouter du Evanescence en slip le soir de la Saint Valentin avec un kebab douteux et de l&rsquo;alcool frelaté relève du plaisir (passe encore pour le kebab et l&rsquo;alcool m&rsquo;enfin).</em></p>



<p>Dix ans après, je rempile sur cette problématique et spoiler je trouve la solution. Comme quoi, un informaticien c&rsquo;est comme un bon vin. Plus on le garde plus c&rsquo;est bon. Enfin tout dépend de l&rsquo;organisation. Oups pardon, je voulais dire la cave 🙂</p>



<p>Vous l&rsquo;aurez compris ça sera la seconde méthode qui sera utilisé. Nous retournerons alors les attributs suivants :</p>



<ul class="wp-block-list">
<li>Le nom du compte qui lock</li>



<li>Le nom de l&rsquo;ordinateur, équipement source qui a cherché à s&rsquo;authentifier</li>



<li>Le nom de domaine</li>
</ul>



<p>Là où j&rsquo;ai merdé, ce que j&rsquo;ai choisi de prendre en temps le temps de déclenchement du script et non le temps de lock de l&rsquo;event. Ce qui du coup dans une configuration spécifique fausse complétement les informations. Donc il doit y avoir une adaptation de ma part sur la première version du code&#8230;</p>



<h3 class="wp-block-heading"> Sécurité</h3>



<p>Nous sommes dans le domaine ? Nous allons réaliser une tâche planifiée ? <a href="https://www.youtube.com/watch?v=F6lVw9sNVic">Alors la réponse elle est vite répondu mon copaing</a> ! Nous passerons par un compte de service managé, oui un gMSA<sup data-fn="9df0753e-8417-42bd-973d-7f3768f6f682" class="fn"><a href="#9df0753e-8417-42bd-973d-7f3768f6f682" id="9df0753e-8417-42bd-973d-7f3768f6f682-link">14</a></sup> comme d&rsquo;habitude (et dire que je ne jugeais que par les comptes de services restreint avant&#8230;).</p>



<p>Les droits seront mis sur le script ainsi que l&rsquo;ensemble des dépendances des utilisateurs externes. Sur le répertoire en somme ? Oui c&rsquo;est ça&#8230;</p>



<h2 class="wp-block-heading">Structure</h2>



<p>S&rsquo;agissant d&rsquo;un petit projet, je me suis demandé si je devais ou non découper ce billet en différent sous article. Au final, je ne pense pas. Il y a eu plus indigeste que ça par le passé 🙂</p>



<h3 class="wp-block-heading">Topographie – Applicative</h3>



<p>Nous retrouvons donc l&rsquo;architecture classique de mes projets précédents (<a href="https://www.youtube.com/watch?v=1vTYQlzp5Oo">Etonnant non ?</a>) 🙂</p>



<p>A la racine du répertoire, nous retrouvons cette fois ci UN fichier exécutable (au lieu de DEUX) :</p>



<ul class="wp-block-list">
<li><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#40d9de" class="has-inline-color">SS_044_WIN_AD_LOCKACCOUNT_1.0.0_Services.ps1</mark></strong>&nbsp;: Fichier pensé pour fonctionner uniquement en mode service. Il ne peut être exécuté si et seulement si un event 4740 est levé. A voir si je fais un mode debug ou pas.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="677" height="266" src="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_007_TopoApps.jpg" alt="" class="wp-image-3219" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_007_TopoApps.jpg 677w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_007_TopoApps-300x118.jpg 300w" sizes="auto, (max-width: 677px) 100vw, 677px" /></figure>
</div>


<p>La suite se déroule en 3 répertoires distincts.</p>



<ul class="wp-block-list">
<li><strong>Modules :</strong>&nbsp;Répertoire contenant les modules powershell développé pour l’application. Aujourd’hui au nombre de deux dissociant la partie Windows Système et HTML.</li>



<li><strong>Log :</strong>&nbsp;Répertoire qui va contenir la ou les traces d’exécution du code si l’option est activée. Cela à son importance car il permet au petit gars qui à dev l’application dans sa cave de corriger les bugs. Le fichier ne prend pas de place et est réinitialisé à chaque lancement.</li>



<li><strong>Config :</strong> Répertoire contenant le fichier de configuration powershell. Je reviendrai plus en détail sur le contenu de ce fichier dans la partie Pratique. Contrairement aux projets DreamNebula et GreenRay, je n&rsquo;ai pas développé la fonction de reconstruction, régénération du fichier de configuration. Inutile car il n&rsquo;y a pas de mode manuel et il n&rsquo;y a pas grand-chose dans le fichier de conf&#8230;</li>
</ul>



<h3 class="wp-block-heading">Topographie – Logiciel</h3>



<p>Je me passe par fénéantise la topographie du logiciel. Il n&rsquo;est pas complexe du tout&#8230; Pour faire simple, cela se résume au cycle de vie suivant :</p>



<ul class="wp-block-list">
<li><strong>0</strong>&nbsp;: Entrez dans le journal d&rsquo;événement de sécurité d&rsquo;un événement 4740.</li>



<li><strong>1</strong>&nbsp;: Déclenchement de la tâche planifiée sur l&rsquo;événement. Récupération des informations liées au verrouillage du compte utilisateur, le poste source et le domaine d&rsquo;application. Ces valeurs de type strings sont passés en argument du script powershell qui est exécuté <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-3-color">SS_044_WIN_AD_LOCKACCOUNT_1.0.0_Services.ps1</mark></strong>.</li>



<li><strong>2</strong> : Le script lit la configuration, puis charge les modules. Une fois les modules chargés, le corps du mail est construit et ce dernier est envoyé par mail. Naturellement et selon les options activées, le mode debug redirigeras l&rsquo;ensemble des transactions powershell dans le fichier de log dans le répertoire du même nom.</li>
</ul>



<p>Et le code ? Il est sur GitHub. Je ne souhaite pas le présenter. Toutefois, je partagerai volontiers ces derniers avec celui qui viendra m&rsquo;en exprimer le souhait. Ca sera l&rsquo;occasion de papoter un peu 🙂</p>



<h2 class="wp-block-heading">Pratique</h2>



<h3 class="wp-block-heading"><strong>Configuration</strong></h3>



<p>Avant de lancer le script, il est nécessaire de faire un tour vers le fichier de configuration contenu dans le répertoire config à la racine du projet. Je vais prendre le temps de décrire chacune des parties de ce fichier.</p>



<p>Le fichier se découpe en 1 partie et 1 sous-partie.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>* Une sous-partie globale qui définit les paramètres du script et de son fonctionnement<br><br>* Une sous-partie concernant l’envoie de notification SMTP<sup data-fn="6abe1078-a9b2-473e-9eaf-22a911773d11" class="fn"><a href="#6abe1078-a9b2-473e-9eaf-22a911773d11" id="6abe1078-a9b2-473e-9eaf-22a911773d11-link">15</a></sup>, futur feature/bug (rayer la mention inutile) à venir<br></td><td><img loading="lazy" decoding="async" width="550" height="212" class="wp-image-3212" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_005_configFile.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_005_configFile.jpg 631w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_005_configFile-300x116.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3190_f61230-f2 kt-accordion-has-2-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3190_e5b7a3-f5"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Global</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p><strong>DEBUG&nbsp;:</strong>&nbsp;Prend la valeur boolean $true ou $false. Ce paramètre permet d’activer dans la console le mode debug.</p>



<p><strong>TRANSACTION_SCRIPT&nbsp;:</strong>&nbsp;Prend la valeur boolean $true ou $false. Ce paramètre active ou non la redirection des flux de la console dans un fichier de log. Le fichier est écrasé à chaque exécution du code.</p>



<p><strong>TRANSACTION_SCRIPT_FILE&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Indique le nom du fichier dans lequel toutes les sorties vont être redirigées. Attention ce dernier n’est pris en compte que si et seulement si le paramètre TRANSACTION_SCRIPT est définie à $true.</p>



<p><strong>AUTHOR&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Prend la valeur une chaine de caractère de type String. Le nom du créateur des scripts afin d’afficher l’information dans les différents rendus.</p>



<p><strong>VERSION&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Suivre l’évolution de versionning de l’outil et des scripts.</p>



<p><strong>DATE&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. La date de la dernière modification et version disponible.</p>



<p><strong>MODULES&nbsp;:</strong>&nbsp;Prend en paramètre un tableau de chaine de caractère de type String. L’ensemble des modules définit dans ce tableau seront chargés au démarrage de l’application. Les modules doivent être présent dans le répertoire module au format .psm1</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3190_cef629-59"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; SMTP</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p><strong>FROM :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Va contenir l’adresse de l’émetteur. Dans la logique, j’aime à utiliser le nom du serveur ou du rôle, par exemple srv-task01@contoso.com.</p>



<p><strong>TO :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Va contenir l’adresse du destinataire qui doit recevoir le mail. Dans la logique, préférer une LD<sup><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-2-pratique/#70c9a30b-c61d-4e80-9e38-3b36d25b68ed">7</a></sup>&nbsp;ou une BAL<sup><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-2-pratique/#d60f938e-acfd-4304-9be7-299a91ca7350">8</a></sup>&nbsp;partagée pour que l’information et la responsabilité ne soit pas porter que par un individu.</p>



<p><strong>SERVERNAME :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Le nom du serveur qui fait relai SMTP, pour plus de sécurité, renseigner le FQDN<sup><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-2-pratique/#fc9e2e62-2fcd-4894-9978-6dd24a213c6c">9</a></sup>&nbsp;en lieu et place d’une IP.</p>



<p><strong>PORT :&nbsp;</strong>Prend la valeur une chaine de caractère de type String. Préciser le port d’écoute du serveur SMTP. 25, 587, 465. Libre à chacun.</p>
</div></div></div>
</div></div></div>



<p></p>



<p>Avec la compréhension du fichier de configuration, je pense que nous pouvons passer à la suite, soit déployer l’application sur le serveur.</p>



<h3 class="wp-block-heading">Installation</h3>



<p>Je passe alégrement la partie gMSA il y a un certain nombre d&rsquo;article sur le net (comme déjà dit dans des billets précédents) qui traite déjà du sujet. Pour le reste, j&rsquo;ai comme d&rsquo;habitude renforcé la sécurité et implémenté mes propres mécanismes (la preuve en est, j&rsquo;ai passé deux put**n d&rsquo;heures à trouver pourquoi ma tâche ne se lançait pas&#8230;).</p>



<p>Là où ça se corse, c&rsquo;est au niveau de la tache planifiée. Si vous êtes sur un environnement possédant l&rsquo;expérience utilisateur, vous êtes sauvés. En revanche, dans mon cas sur mes serveurs CORE, je l&rsquo;ai mais alors bien profond dans la cucurbitacée&#8230; Voyez vous comme quoi une chose tout insignifiante soit il peut devenir un vrai casse-tête.</p>



<p>Mais alors qu&rsquo;elle est cette petite chose insignifiante ?</p>



<h4 class="wp-block-heading">The ScheduledTask</h4>



<p>A première vue, vous vous demandez pourquoi je parle de la tache planifiée&#8230; Il s&rsquo;avère que dans la version WINDOWS Core, nous ne pouvons pas créer de tache planifiée sur un déclenchement d&rsquo;événement. </p>



<p>En réalité, nous pouvons constater également le dysfonctionnement sur un environnement WINDOWS avec expérience utilisateur. Il suffit d&rsquo;utiliser la console powershell (il suffit de revenir aux bases du RTFM<sup data-fn="58e956e0-f13f-4d89-8d26-b740eaec0aff" class="fn"><a href="#58e956e0-f13f-4d89-8d26-b740eaec0aff" id="58e956e0-f13f-4d89-8d26-b740eaec0aff-link">16</a></sup>).</p>



<p>Donc comment faire une tache planifiée, si :</p>



<ul class="wp-block-list">
<li>Nous n&rsquo;avons pas d&rsquo;interface graphique</li>



<li>Les commandes powershell ne fonctionne pas</li>



<li>Les moyens de contournement comme WAC<sup data-fn="57ebb545-b5d9-40ef-ba6b-5f6925982680" class="fn"><a href="#57ebb545-b5d9-40ef-ba6b-5f6925982680" id="57ebb545-b5d9-40ef-ba6b-5f6925982680-link">17</a></sup> ne fonctionne pas (normale co**ard c&rsquo;est du powershell derrière)</li>



<li>La console mmc.exe en remote pas plus de chance</li>
</ul>



<p>J&rsquo;ai essayé l&rsquo;exécutable schtasks mais je ne suis pas arrivé à mes fins. Vous vous voulez la vérité ? J&rsquo;ai lu qu&rsquo;il fallait faire une fichier XML et ajouté les champs blablablabla&#8230; Je me suis dit « No Way » je vais encore me foirer dans une balise ou je vais avoir un problème d&rsquo;encodage sur des caractères à la mord moi le noeud&#8230;</p>



<p>J&rsquo;ai donc pensé à un autre moyen (tu as surtout épluché le net et les divers forum technet oui&#8230;). Pourquoi ne pas créer la tache sur mon poste avec des paramètres que je modifierai une fois importé ? Et bien ça voyez vous, ça fonctionne.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>La création de la tâche ne pose pas de problème. <br>Je joins toutefois la petite capture pour la configuration des critères de déclenchement de l&rsquo;évent.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="650" height="277" class="wp-image-3225" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_008_scheduledtasks.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_008_scheduledtasks.jpg 1220w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_008_scheduledtasks-300x128.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_008_scheduledtasks-1024x436.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_008_scheduledtasks-768x327.jpg 768w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p></p>



<p>Une fois la tache créée, exportons là et ouvrons cette dernière dans un éditeur de texte.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Oh mais dit donc, ça ne serait pas ?<br>Hé si le voilà notre fichier XML que l&rsquo;on devait construire via la commande svctasks.<br><br>Et dire qu&rsquo;une tache planifiée ça ressemble à ça.<br><br>Vous noterez que j&rsquo;ai occulté deux parties.<br><br>La première partie permet de récupérer les valeurs de l&rsquo;événement. Il sera nécessaire de modifier manuellement le fichier XML. Mais je reviendrai plus en détails sur ce point dans la sous partie à venir (c&rsquo;est ça ma frustration décennale !).<br><br>La seconde partie permet de passer les variables que contiennent les valeurs récupérées ci haut en paramètre de notre script.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="750" height="740" class="wp-image-3226" style="width: 750px;" src="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_009_scheduledtasksXML.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_009_scheduledtasksXML.jpg 898w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_009_scheduledtasksXML-300x296.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_009_scheduledtasksXML-768x758.jpg 768w" sizes="auto, (max-width: 750px) 100vw, 750px" /></td></tr></tbody></table></figure>



<p></p>



<p>Bien. Maintenant importons la tâche 🙂</p>



<pre class="wp-block-code has-theme-palette-4-background-color has-background has-small-font-size"><code><mark style="background-color:var(--global-palette4)" class="has-inline-color has-theme-palette-9-color">&gt; $myTask = Get-Content "PATH_WHERE_XML_FILE\myTask.xml" | Out-String
&gt; Register-ScheduledTask -XML $myTask -TaskName "PROD_EVENT_4740" -TaskPath "\_ronelab"</mark></code></pre>



<h4 class="wp-block-heading">Récupérer les valeurs</h4>



<p>Comme écrit plus haut, ce point va mettre fin à une frustration longue de 10 ans. Comment retourner les valeurs levées dans un event depuis l&rsquo;exécution d&rsquo;une tâche planifiée&#8230;</p>



<p>Là j&rsquo;ai lu un nombre important de documentation pour comprendre comment cela fonctionne et comment mettre en œuvre la chose surtout. Toujours dans la démarche des 3S<sup data-fn="7ce633ec-415b-40dd-8fe5-9a646966011c" class="fn"><a href="#7ce633ec-415b-40dd-8fe5-9a646966011c" id="7ce633ec-415b-40dd-8fe5-9a646966011c-link">18</a></sup>. </p>



<p>Dans les approches :</p>



<ul class="wp-block-list">
<li>Quel est la structure, schéma du fichier XML d&rsquo;une tache planifié : <a href="https://learn.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-schema">Lien</a></li>



<li>Quel est la structure la plus adapté pour un eventTrigger de type complexe : <a href="https://learn.microsoft.com/en-us/windows/win32/taskschd/taskschedulerschema-eventtriggertype-complextype">Lien</a></li>



<li>Un exemple d&rsquo;implémentation : <a href="https://learn.microsoft.com/en-us/previous-versions//aa446889(v=vs.85)">Lien</a></li>
</ul>



<p>Avec la plus grande sincérité du monde, je n&rsquo;avais pas il y a 10 ans de cela la maturité intellectuelle pour assimiler cette notion. Aujourd&rsquo;hui je rougis de l&rsquo;imbécile que je suis et de la simplicité et évidence de son mécanisme.</p>



<p>Maintenant que j&rsquo;ai compris (mais que je n&rsquo;ai pas expliqué 🙂 Il faut bien que vous vous investissiez aussi non ? Passons à la compréhension d&rsquo;un événement. Il faudra sélectionner un évent 4740 et se rendre dans la vue Detail en Friendly, mais nous pouvons aussi se la jouer XML.</p>



<p>Nous notons deux catégories que nous pouvons déployer :</p>



<ul class="wp-block-list">
<li><strong>System :</strong> Va contenir l&rsquo;ensemble des balises et valeurs propres au déclenchement de la tâche avec les propriétés de l&rsquo;évent. Comme dit plus tôt, l&rsquo;un des attributs qui pourrait nous intéresser est le temps où l&rsquo;évent a été inscrit dans le journal. Je prenais le temps de lancement du script, mais ce dernier n&rsquo;est pas la bonne source de temps. Bref, il convient alors de noter le chemin de l&rsquo;attribut qui nous intéresse :
<ul class="wp-block-list">
<li><mark style="background-color:rgba(0, 0, 0, 0);color:#3fa34a" class="has-inline-color">Event</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">/System/TimeCreated/</mark><mark style="background-color:rgba(0, 0, 0, 0);color:#ea1212" class="has-inline-color">@SystemTime</mark></li>
</ul>
</li>
</ul>



<p class="has-text-align-center"><strong>Il est important de noter que tout part de notre événement d&rsquo;où le <mark style="background-color:rgba(0, 0, 0, 0);color:#3fa34a" class="has-inline-color">Event</mark> en début de path. Puis le chemin <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">/System/TimeCreated/</mark> jusqu&rsquo;à la variable qui contient notre valeur spécifiée par le <mark style="background-color:rgba(0, 0, 0, 0);color:#ea1212" class="has-inline-color">@</mark> devant <mark style="background-color:rgba(0, 0, 0, 0);color:#ea1212" class="has-inline-color">SystemTime</mark></strong></p>



<ul class="wp-block-list">
<li><strong>EventData : </strong>Va contenir l&rsquo;ensemble des balises et valeurs propres à l&rsquo;évènement de sécurité déclenché. Ce qui nous intéresse ce sont les attributs TargetUserName qui contient le login utilisé et verrouillé, TargetDomainName qui contient le nom de poste cible où la connexion a tenté d&rsquo;être initier et le SubjectDomainName qui contient le nom de domaine cible du compte verrouillé. Soit alors les les chemins suivants :
<ul class="wp-block-list">
<li><mark style="background-color:rgba(0, 0, 0, 0);color:#3fa34a" class="has-inline-color">Event</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">/EventData/Data/</mark><mark style="background-color:rgba(0, 0, 0, 0);color:#ea1212" class="has-inline-color">@[Name= »TargetDomainName »]</mark></li>



<li><mark style="background-color:rgba(0, 0, 0, 0);color:#3fa34a" class="has-inline-color">Event</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">/EventData/Data/</mark><mark style="background-color:rgba(0, 0, 0, 0);color:#ea1212" class="has-inline-color">@[Name= »SubjectDomainName »]</mark></li>



<li><mark style="background-color:rgba(0, 0, 0, 0);color:#3fa34a" class="has-inline-color">Event</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">/EventData/Data/</mark><mark style="background-color:rgba(0, 0, 0, 0);color:#ea1212" class="has-inline-color">@[Name= »TargetUserName »]</mark></li>
</ul>
</li>
</ul>



<p>Alors comment intégrer proprement dans notre fichier XML correspondant à notre tache planifier nos 4 paths pour récupérer les valeurs ?</p>



<p>Normalement, nous avons eu toutes les informations ci-haut pour réaliser l&rsquo;opération 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="627" height="87" src="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_010_valueQueries.jpg" alt="" class="wp-image-3232" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_010_valueQueries.jpg 627w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_010_valueQueries-300x42.jpg 300w" sizes="auto, (max-width: 627px) 100vw, 627px" /></figure>
</div>


<p>Nous avons défini nos variables qui contiennent nos données. Il suffit alors de passer nos variables en arguments de notre script. Je passe une nouvelle fois mon tour. Le passage de variable en arguments d&rsquo;un script powershell c&rsquo;est un basique. La modification peut être réalisé en graphique dans le TaskScheduler ou directement dans le fichier XML.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="787" height="44" src="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_011_actionArgs.jpg" alt="" class="wp-image-3233" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_011_actionArgs.jpg 787w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_011_actionArgs-300x17.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_011_actionArgs-768x43.jpg 768w" sizes="auto, (max-width: 787px) 100vw, 787px" /></figure>
</div>


<p>Maintenant, il ne reste plus qu&rsquo;à réimporter la tache de nouveau puis de réaliser un test.</p>



<h3 class="wp-block-heading">Reporting</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Pour le test, rien de plus facile&#8230;<br>J&rsquo;ai choisie d&rsquo;initier une connexion à l&rsquo;une des ressources des domaines à partir d&rsquo;un compte pour lequel la FGPP est active :<br><br>* RONEALB\erwan.guillemard<br><br>Depuis une instance de bureau à distance, je décide de mettre en application ma plus belle couche 8 en saisissant 5 fois mon mot de passe de manière erroné.<br><br>Windows m&rsquo;informe que mon compte a été verrouillé à la suite de plusieurs tentatives d&rsquo;authentifications infructueuses.<br><br>Quelques minutes après, je reçois le mail ci-contre.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="650" height="575" class="wp-image-3215" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_006_mail.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_006_mail.jpg 702w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_006_mail-300x265.jpg 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p></p>



<p>En regardant en détail, j&rsquo;ai bien les informations qui m&rsquo;informe que le compte erwan.guillemard a été verrouillé à la suite d&rsquo;une plusieurs tentatives de connexions depuis la machine EGWKS-RDB01 le 26/09/2025 à 20:31:40 sur le domaine RONELAB.</p>



<p>Toutefois et si je regarde avec précision le déclenchement de la tâche, j&rsquo;ai 7 minutes de retard dans le temps affiché dans mon mail et la date d&rsquo;entrée dans le journal de sécurité. Ce retard s&rsquo;explique par une mauvaise prise en compte de la valeur DateTime. Je pensais que la valeur Datetime du script serait définis lors du lancement du script à la détection de l&rsquo;événement. Cependant, mon SI étant très ancien, la tache met une bonne dizaine de minutes (en grossissant le trait) à se lancer. Ainsi je génère un delta ce qui n&rsquo;est pas super en termes de sécurité. Il faudrait donc que je récupère la valeur DateTime présente dans l&rsquo;événement.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Je suis content d&rsquo;avoir réinventé mon propre système de notification sur le verrouillage d&rsquo;un compte utilisateur dans un domaine à partir de la problématique qu&rsquo;avait il y a maintenant plusieurs années un ancien collègue. Ainsi, j&rsquo;ai pu combler une problématique vieille de 10 ans en relation avec les événements et les taches planifiées (dans mon projet de mémoire sur la supervision Shinken).</p>



<p>J&rsquo;ai également constaté que les modules développés dans les projets précédents m&rsquo;ont fait gagner un temps monstrueux. Cela me permet donc de me dire et de m&rsquo;auto-confirmer que premièrement je ne fais pas que de la merde, secondement qu&rsquo;à partir de maintenant je vais prendre un chemin différent quant à l&rsquo;ensemble des problématiques qui nécessite un dev en powershell.</p>



<p>Le plus difficile restera je le pense de toujours garder une vision claire et qui réponde au 3S.</p>



<p>Si je devais être efficient, je reprendrais mes bouts de code existant concernant la création de ticket dans la solution ITSM de COMBODO (ITOP) pour générer un ticket en criticité haute pour le verrouillage d&rsquo;un compte. De cette manière, le centre de service ou les équipes locales (internalisées ou externalisées) pourraient être proactives quant à tous comportements succès en relation avec l&rsquo;authentification et l&rsquo;accès à des ressources. Ce qui pourrait alors se résumer selon notre bon vieux William Shakespear par « Le plaisir d&rsquo;un travail en guérit la peine ».</p>



<p>J&rsquo;ai encore une fois repris une idée. Je pense qu&rsquo;il serait temps que je reprenne un peu de temps pour innover. Certes, comprendre et mettre en pratique les idées de mes paires et une bonne chose mais je pense qu&rsquo;il est souhaitable de vivre pleinement une nouvelle fois cette satisfaction personnelle. Mon ultime rature se limitera à « <strong>Est ce que cela valait ce billet ?</strong>« .</p>



<p>Je vous laisse jugez de tout ça et prendre contact si vous voulez le bout de code 🙂</p>



<p>Le mot de la fin&nbsp;:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Vous êtes surqualifié pour le poste ? Que neni, j&rsquo;aime les salsifis et je sens vaguement le chou. Je vous embauche et Toper Harley reste dans la boucle. Merci, j&rsquo;ai les films de programmateurs.</p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://cyber.gouv.fr/sites/default/files/2021/10/anssi-guide-authentification_multifacteur_et_mots_de_passe.pdf">ANSSI : Guide d&rsquo;authentification multi facteur et mots de passe</a></li>



<li><a href="https://learn.microsoft.com/fr-fr/windows-server/security/windows-authentication/credentials-processes-in-windows-authentication">WINDOWS : Authentification &amp; Identification</a></li>



<li><a href="https://learn.microsoft.com/fr-fr/windows-server/identity/ad-ds/plan/appendix-l--events-to-monitor">WINDOWS : Evénements à surveiller</a></li>



<li><a href="https://learn.microsoft.com/fr-fr/windows/win32/wes/eventschema-eventtype-complextype">WINDOWS : Type Complexe EventType</a></li>



<li><a href="https://learn.microsoft.com/fr-fr/windows-server/security/kerberos/kerberos-authentication-overview">WINDOWS : KERBEROS</a></li>



<li><a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/schtasks-create">WINDOWS : Svctasks</a></li>



<li><a href="https://learn.microsoft.com/en-us/powershell/module/scheduledtasks/new-scheduledtask?view=windowsserver2025-ps">WINDOWS : New-ScheduledTask</a></li>



<li><a href="https://learn.microsoft.com/en-us/powershell/module/scheduledtasks/register-scheduledtask?view=windowsserver2025-ps">WINDOWS : Register-ScheduledTask</a></li>



<li><a href="https://learn.microsoft.com/en-us/windows/win32/taskschd/taskschedulerschema-eventtriggertype-complextype">WINDOWS : Event &amp; Queries</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="ee3df61f-a519-4425-8d3e-e24b9d4968ce"><strong>AD :</strong> Active Directory <a href="#ee3df61f-a519-4425-8d3e-e24b9d4968ce-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="8a83b3e9-a47a-428b-8eba-109292ff90d3"><strong>PSSI :</strong> Politique de Sécurité des Systèmes d&rsquo;Informations <a href="#8a83b3e9-a47a-428b-8eba-109292ff90d3-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="c83eaf51-a4dd-41a4-bd7a-588ddcc4945b"><strong>OSI :</strong> Open Systems Interconnection <a href="#c83eaf51-a4dd-41a4-bd7a-588ddcc4945b-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="b2669417-059d-4c69-984f-1d328949f770"><strong>SI</strong> : Système d&rsquo;Informations <a href="#b2669417-059d-4c69-984f-1d328949f770-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="18e69ed2-abc8-46a5-a20d-72f7eb983f95"><strong>DNS :</strong> Domain Name Service <a href="#18e69ed2-abc8-46a5-a20d-72f7eb983f95-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="0721b4af-c255-4f7e-809c-b8c9286fd00d"><strong>DC :</strong> Domain Controller <a href="#0721b4af-c255-4f7e-809c-b8c9286fd00d-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="4fcc112f-3418-4247-99c0-2a394beaf5ae"><strong>NTLM :</strong> NT Lan Manager <a href="#4fcc112f-3418-4247-99c0-2a394beaf5ae-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="3e2a8bc8-2b61-4fd4-b3b4-db26e8c201c2"><strong>TGT</strong> : Ticket Granting Ticket <a href="#3e2a8bc8-2b61-4fd4-b3b4-db26e8c201c2-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="3f2db1e6-f957-433a-a801-b23ae4ea333f"><strong>KDC :</strong> Key Distribution Center <a href="#3f2db1e6-f957-433a-a801-b23ae4ea333f-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="b16e4796-0ae1-459e-91b3-49a78e1a49d6"><strong>TGS :</strong> Ticket Granting Server <a href="#b16e4796-0ae1-459e-91b3-49a78e1a49d6-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="f45783de-eede-4502-9d26-843d9efb5a18"><strong>GPO :</strong> Group Policy Object <a href="#f45783de-eede-4502-9d26-843d9efb5a18-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="bfa3d65a-4536-4421-a219-6600a3b2a55b"><strong>ANSSI :</strong> Agence Nationale de Sécurité des Systèmes Informatiques <a href="#bfa3d65a-4536-4421-a219-6600a3b2a55b-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="e9521bc3-b710-4c91-bf97-8570fc3d067b"><strong>FGPP :</strong> Fine Grained Password Policy <a href="#e9521bc3-b710-4c91-bf97-8570fc3d067b-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="9df0753e-8417-42bd-973d-7f3768f6f682"><strong>gMSA :</strong> Group Managed Service Account <a href="#9df0753e-8417-42bd-973d-7f3768f6f682-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="6abe1078-a9b2-473e-9eaf-22a911773d11"><strong>SMTP :</strong> Simple Mail Transfert Protocol <a href="#6abe1078-a9b2-473e-9eaf-22a911773d11-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="58e956e0-f13f-4d89-8d26-b740eaec0aff"><strong>RTFM :</strong> Read The F*cking Manual <a href="#58e956e0-f13f-4d89-8d26-b740eaec0aff-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="57ebb545-b5d9-40ef-ba6b-5f6925982680"><strong>WAC :</strong> Windows Admin Center <a href="#57ebb545-b5d9-40ef-ba6b-5f6925982680-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="7ce633ec-415b-40dd-8fe5-9a646966011c"><strong>3S :</strong> Simple, Standard, Sécurisé <a href="#7ce633ec-415b-40dd-8fe5-9a646966011c-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Dream Nebula, VMWare KPI Partie 2 : Pratique</title>
		<link>https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-2-pratique/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sun, 07 Sep 2025 18:52:20 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[VEEAMONE]]></category>
		<category><![CDATA[VMWare]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3134</guid>

					<description><![CDATA[L&#8217;objectif de cette partie est d&#8217;expliquer comment déployer l&#8217;outil. Toutefois et sans les sources, ce dernier ne sert pas à grand chose. Cependant, si le projet devient communautaire, alors ce dernier prendra tout son sens 🙂 Comme dit précédemment pour GreenRay, il s&#8217;agit là d&#8217;un Readme dans un format différent du traditionnel fichier txt et...]]></description>
										<content:encoded><![CDATA[


<p>L&rsquo;objectif de cette partie est d&rsquo;expliquer comment déployer l&rsquo;outil. Toutefois et sans les sources, ce dernier ne sert pas à grand chose. Cependant, si le projet devient communautaire, alors ce dernier prendra tout son sens 🙂</p>



<p>Comme dit précédemment pour GreenRay, il s&rsquo;agit là d&rsquo;un Readme dans un format différent du traditionnel fichier txt et du wiki.</p>



<h3 class="wp-block-heading">Prérequis</h3>



<p>Dernier point avant de taper dans le fond du sujet, le déploiement ne se fait que dans un environnement WINDOWS (Workstation ou Server) ayant au minimum la version Powershell 5 d’installer et qui prend en charge les communication TLS<sup data-fn="c2fa8834-05a4-4bc2-92dd-aa0fe3b68489" class="fn"><a href="#c2fa8834-05a4-4bc2-92dd-aa0fe3b68489" id="c2fa8834-05a4-4bc2-92dd-aa0fe3b68489-link">1</a></sup>&nbsp;en version 1.2 minimum.</p>



<p>Bien que pas j’ai automatisé un bon nombre d’installation de dépendances certaines restent tout de même à déployer manuellement. Toutefois, les outils à déployer manuellement concernent la partie exploitation de la donnée qui peuvent et doivent être dissocier de la partie serveur.</p>



<p>Naturellement et bien que cela coule de source, LES PRIVILEGES ADMINISTRATEURS sont nécessaire au premier usage pour l’installation des dépendances (logique non&nbsp;?).</p>



<h4 class="wp-block-heading">Back End</h4>



<p>Les prérequis sont les suivants :</p>



<ul class="wp-block-list">
<li><strong>Module powershell PSSQLite :</strong> Ce dernier est déployé automatiquement par l’application. Toutefois, il est possible d’installer cette dernière manuellement.</li>



<li><strong>Module powershell PowerCLI VMWare :</strong> J&rsquo;ai à ce jour une version alpha du déploiement automatique du module. Toutefois ce dernier n&rsquo;est pas intégré dans le projet Dream Nebula, mais dans un projet à part SS_042_VMWareInstalled-PowerCLI. Il sera donc nécessaire de déployer ce dernier manuellement.</li>
</ul>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3134_3bcabc-1c kt-accordion-has-2-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3134_447f52-26"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Vérifier la présence du module</span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>La commande des plus classique, Get-InstalledModule pour lister les modules présents sur le système.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d570dd0ea3a6fc5e9d7b3303c6a05cbf"><code>&gt; Get-InstalledModule | Where-Object {$_.Name -eq "PSSQLite" -or $_.Name -like "VMWare.*"}</code></pre>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3134_385c3a-a8"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Installer le module</span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Toujours vérifier en amont la disponibilité du module dans la liste des repos et lancer l’installation. Il est possible de filtrer et d’installer une version spécifique.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-f267b7bbbf2fc3781a8d389b42a1bef6"><code>&gt; Find-Module -Name "VMWare.PowerCLI"
&gt; Install-Module -Name "VMWare.PowerCLI"</code></pre>



<p>L&rsquo;un des points intéressants, c&rsquo;est que je viens de découvrir que le module VMWare.PowerCLI est déprécié et remplacé par le module VCF.PowerCLI.</p>



<p>Grand bien nous fasse, nous allons installer les deux versions (pour l&rsquo;exemple). Il conviendra de mon côté d&rsquo;adapter le module dédié à l&rsquo;extraction des données VMWare. Cela peut être une broutille comme cela peut être complexe. Les joies des devs 🙂</p>



<p></p>
</div></div></div>
</div></div></div>



<h4 class="wp-block-heading">Front End</h4>



<p>Sur le serveur ou poste qui servira à exploiter les données il sera nécessaire d’installer les dépendances suivantes&nbsp;:</p>



<ul class="wp-block-list">
<li>Drivers ODBC<sup data-fn="4b387ac7-d458-4404-94be-041eac1df36a" class="fn"><a href="#4b387ac7-d458-4404-94be-041eac1df36a" id="4b387ac7-d458-4404-94be-041eac1df36a-link">2</a></sup>&nbsp;for SQLite3</li>



<li>Microsoft PowerBI (si powerBI utilisé)</li>



<li>DB<sup data-fn="fea49933-c957-436d-b291-535ce6c4e1e8" class="fn"><a href="#fea49933-c957-436d-b291-535ce6c4e1e8" id="fea49933-c957-436d-b291-535ce6c4e1e8-link">3</a></sup>&nbsp;Browser for SQLite (en option mais pratique pour débugger ou altérer des données dans les tables)</li>
</ul>



<p>L’installation des divers composants ne représente aucun point bloquant. J’ajoute en fin de ce billet les sources pour télécharger les différents composants. Pour vraiment prendre la main de chacun le processus d’installation est disponible ci-dessous.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3134_f10c4a-a5 kt-accordion-has-3-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3134_deee4e-ce"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Driver ODBC</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>L’un des points problématiques à mon sens se porte sur l’origine du site qui n’est pas en HTTPS. Mon expérience de jadis sur la technologie SQLite fait que j’ai dû utiliser ce site. Je n’ai jamais eu de problème.</p>



<p>Oui, j’ai dû chercher dans les mémoires que j’avais rédigé à l’époque…</p>



<p></p>


<div class="kb-gallery-wrap-id-3134_8d95b2-c0 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-3134_8d95b2-c0 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install.jpg" width="501" height="390" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install.jpg" data-id="3067" class="wp-image-3067 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install.jpg 501w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install-300x234.jpg 300w" sizes="auto, (max-width: 501px) 100vw, 501px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install.jpg" width="504" height="392" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install.jpg" data-id="3064" class="wp-image-3064 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install.jpg 504w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install-300x233.jpg 300w" sizes="auto, (max-width: 504px) 100vw, 504px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install.jpg" width="500" height="391" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install.jpg" data-id="3065" class="wp-image-3065 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install.jpg 500w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install-300x235.jpg 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install.jpg" width="502" height="392" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install.jpg" data-id="3066" class="wp-image-3066 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install.jpg 502w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install-300x234.jpg 300w" sizes="auto, (max-width: 502px) 100vw, 502px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install.jpg" width="500" height="390" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install.jpg" data-id="3063" class="wp-image-3063 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install.jpg 500w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install-300x234.jpg 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></div></div></figure></div></div></li></ul></div></div></div></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3134_1b8f3c-c4"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>PowerBI</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Pas de difficulté en soi. Il est toutefois opportun de posséder un compte Microsoft…</p>



<p></p>


<div class="kb-gallery-wrap-id-3134_127a8f-4a alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-3134_127a8f-4a kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install.jpg" width="495" height="395" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install.jpg" data-id="3069" class="wp-image-3069 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install.jpg 495w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install-300x239.jpg 300w" sizes="auto, (max-width: 495px) 100vw, 495px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_1_pbi_install.jpg" width="496" height="394" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_1_pbi_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_1_pbi_install.jpg" data-id="3068" class="wp-image-3068 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_1_pbi_install.jpg 496w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_1_pbi_install-300x238.jpg 300w" sizes="auto, (max-width: 496px) 100vw, 496px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install.jpg" width="496" height="394" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install.jpg" data-id="3070" class="wp-image-3070 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install.jpg 496w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install-300x238.jpg 300w" sizes="auto, (max-width: 496px) 100vw, 496px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install.jpg" width="496" height="394" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install.jpg" data-id="3071" class="wp-image-3071 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install.jpg 496w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install-300x238.jpg 300w" sizes="auto, (max-width: 496px) 100vw, 496px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install.jpg" width="497" height="396" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install.jpg" data-id="3073" class="wp-image-3073 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install.jpg 497w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install-300x239.jpg 300w" sizes="auto, (max-width: 497px) 100vw, 497px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install.jpg" width="497" height="395" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install.jpg" data-id="3074" class="wp-image-3074 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install.jpg 497w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install-300x238.jpg 300w" sizes="auto, (max-width: 497px) 100vw, 497px" /></div></div></figure></div></div></li></ul></div></div></div></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3134_3d7818-9d"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>DB Browser for SQLite</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Toujours en mode enfonçage de porte… C&rsquo;est pas un copié/collé de l&rsquo;article précédent ? Chhhhhuuuuuuttttttt</p>


<div class="kb-gallery-wrap-id-3134_a281c1-12 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-3134_a281c1-12 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install.jpg" width="493" height="388" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install.jpg" data-id="3075" class="wp-image-3075 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install.jpg 493w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install-300x236.jpg 300w" sizes="auto, (max-width: 493px) 100vw, 493px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install.jpg" width="494" height="389" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install.jpg" data-id="3076" class="wp-image-3076 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install.jpg 494w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install-300x236.jpg 300w" sizes="auto, (max-width: 494px) 100vw, 494px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install.jpg" width="499" height="391" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install.jpg" data-id="3077" class="wp-image-3077 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install.jpg 499w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install-300x235.jpg 300w" sizes="auto, (max-width: 499px) 100vw, 499px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install.jpg" width="498" height="392" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install.jpg" data-id="3078" class="wp-image-3078 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install.jpg 498w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install-300x236.jpg 300w" sizes="auto, (max-width: 498px) 100vw, 498px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install.jpg" width="497" height="388" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install.jpg" data-id="3079" class="wp-image-3079 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install.jpg 497w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install-300x234.jpg 300w" sizes="auto, (max-width: 497px) 100vw, 497px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install.jpg" width="502" height="391" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install.jpg" data-id="3080" class="wp-image-3080 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install.jpg 502w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install-300x234.jpg 300w" sizes="auto, (max-width: 502px) 100vw, 502px" /></div></div></figure></div></div></li></ul></div></div></div></div></div></div></div>
</div></div></div>



<h3 class="wp-block-heading">Configuration</h3>



<p>Avant de lancer le script, il est nécessaire de faire un tour vers le fichier de configuration contenu dans le répertoire config à la racine du projet. Je vais prendre le temps de décrire chacune des parties de ce fichier.</p>



<p>Le fichier se découpe en 1 partie et 5 sous-parties.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>* Une sous-partie globale qui définit les paramètres du script et de son fonctionnement<br><br>* Une sous-partie dédiée à la VCSA<sup data-fn="0f1cb5c5-cbaa-458f-ba19-d4ce7153e316" class="fn"><a href="#0f1cb5c5-cbaa-458f-ba19-d4ce7153e316" id="0f1cb5c5-cbaa-458f-ba19-d4ce7153e316-link">4</a></sup>&nbsp;permettant d’établir la connexion à l’API<sup data-fn="84b0b406-fc6f-443c-a541-0ebf607c41f1" class="fn"><a href="#84b0b406-fc6f-443c-a541-0ebf607c41f1" id="84b0b406-fc6f-443c-a541-0ebf607c41f1-link">5</a></sup>.<br><br>* Une sous-partie dédiée à l’export des données au format CSV, reliquat de la version 1 LEGACY<br><br>* Une sous-partie concernant l’envoie de notification SMTP<sup data-fn="52980565-3e3c-49b0-b7af-7317334f7fb9" class="fn"><a href="#52980565-3e3c-49b0-b7af-7317334f7fb9" id="52980565-3e3c-49b0-b7af-7317334f7fb9-link">6</a></sup>, futur feature/bug (rayer la mention inutile) à venir<br><br>* Une sous-partie dédiée à la base de données SQLite. Faut bien stocker les données quelques parts<br><br>* Une sous-partie concernant le paramétrage du mode service en tant que tâche planifiée</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="356" class="wp-image-3139" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_006_pratique_config_psd.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_006_pratique_config_psd.jpg 1016w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_006_pratique_config_psd-300x194.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_006_pratique_config_psd-768x497.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<p>Après cette longue énumération rébarbative, regardons en détail chacune des parties et sous-parties. Bandant n&rsquo;est il pas ? J&rsquo;avoue que je ne fais pas ch**r du tout car mes deux applications ont le même tronc, socle, base&#8230; Vous voyez quoi ? 🙂</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3134_2e0ae9-43 kt-accordion-has-6-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3134_b5b324-73"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Global</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p><strong>DEBUG&nbsp;:</strong>&nbsp;Prend la valeur boolean $true ou $false. Ce paramètre permet d’activer dans la console le mode debug.</p>



<p><strong>TRANSACTION_SCRIPT&nbsp;:</strong>&nbsp;Prend la valeur boolean $true ou $false. Ce paramètre active ou non la redirection des flux de la console dans un fichier de log. Le fichier est écrasé à chaque exécution du code.</p>



<p><strong>TRANSACTION_SCRIPT_FILE&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Indique le nom du fichier dans lequel toutes les sorties vont être redirigées. Attention ce dernier n’est pris en compte que si et seulement si le paramètre TRANSACTION_SCRIPT est définie à $true.</p>



<p><strong>AUTHOR&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Prend la valeur une chaine de caractère de type String. Le nom du créateur des scripts afin d’afficher l’information dans les différents rendus.</p>



<p><strong>VERSION&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Suivre l’évolution de versionning de l’outil et des scripts.</p>



<p><strong>DATE&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. La date de la dernière modification et version disponible.</p>



<p><strong>MODULES&nbsp;:</strong>&nbsp;Prend en paramètre un tableau de chaine de caractère de type String. L’ensemble des modules définit dans ce tableau seront chargés au démarrage de l’application. Les modules doivent être présent dans le répertoire module au format .psm1</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3134_0bd97b-8a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; VCSA</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p><strong>VCSA_NAME :</strong> Prend en paramètre une chaine de caractère de type String.&nbsp;Il correspond au nom fqdn de l&rsquo;appliance. C&rsquo;est à partir de cette valeur que la connexion cherchera a être établi.</p>



<p><strong>VCSA_PORT :</strong> Prend en paramètre en entier de type Integer. Il s’agit du port sur lequel l’API est publiée. Par défaut la valeur est 443.</p>



<p><strong>LOGIN_USER :</strong> Le nom du compte qui sera utilisé à s&rsquo;authentifier à l&rsquo;appliance. Attention, les droits, privilèges doivent être en adéquation.</p>



<p><strong>LOGIN_FILE_CLIXML :</strong> Prend en paramètre une chaine de caractère de type String.&nbsp;Il correspond au chemin du fichier qui contient le login et le mot de passe chiffré servant à son authentifier.</p>



<p><strong>VCSA_PATH_DIR_LESSPRIVILEGE :</strong> Prend en paramètre une chaine de caractère de type String. Doit pointer sur un fichier CSV avec les droits et permissions strictement nécessaire VMWare à l&rsquo;application. Oui, le rôle Administrator n&rsquo;est pas la solution à tous les maux !</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3134_c40465-b9"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; VCSA Export </strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p><strong>VCSA_PATH_DIR_HTML : </strong>Prend en paramètre une chaine de caractère de type String. Pointe sur le sous-répertoire Export. Ou un autre répertoire de votre guise. Va contenir le site web html de l&rsquo;ensemble des rapports.</p>



<p><strong>VCSA_PATH_DIR_HTML_CUSTOMER :</strong> Prend en paramètre une chaine de caractère de type String. Sous répertoire du répertoire Export, ce répertoire va contenir l&rsquo;ensemble des rapports par bulles ou client.</p>



<p><strong>VCSA_PATH_DIR_HTML_INFRASTRUCTURE :</strong> Prend en paramètre une chaine de caractère de type String. Sous répertoire du répertoire Export, ce répertoire va contenir l&rsquo;ensemble des rapports propre aux ressources d&rsquo;infrastructures.</p>



<p><strong>VCSA_THRESHOLD_WARNING : </strong>Prend en paramètre un entier de type Int32. Correspond à la valeur d&rsquo;avertissement défini par l&rsquo;administrateur. Dans mon cas, 70 pour 70%. Au delà de ce seuil, des modifications visuelles sont appliquées.</p>



<p><strong>VCSA_THRESHOLD_CRITICIAL :</strong> Prend en paramètre un entier de type Int32. Correspond à la valeur critique défini par l&rsquo;administrateur. Dans mon cas, 90 pour 90%. Au delà de ce seuil, des modifications visuelles sont appliquées.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3134_b737f8-48"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; SMTP</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p><strong>FROM :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Va contenir l’adresse de l’émetteur. Dans la logique, j’aime à utiliser le nom du serveur ou du rôle, par exemple srv-task01@contoso.com.</p>



<p><strong>TO :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Va contenir l’adresse du destinataire qui doit recevoir le mail. Dans la logique, préférer une LD<sup data-fn="70c9a30b-c61d-4e80-9e38-3b36d25b68ed" class="fn"><a href="#70c9a30b-c61d-4e80-9e38-3b36d25b68ed" id="70c9a30b-c61d-4e80-9e38-3b36d25b68ed-link">7</a></sup>&nbsp;ou une BAL<sup data-fn="d60f938e-acfd-4304-9be7-299a91ca7350" class="fn"><a href="#d60f938e-acfd-4304-9be7-299a91ca7350" id="d60f938e-acfd-4304-9be7-299a91ca7350-link">8</a></sup>&nbsp;partagée pour que l’information et la responsabilité ne soit pas porter que par un individu.</p>



<p><strong>SERVERNAME :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Le nom du serveur qui fait relai SMTP, pour plus de sécurité, renseigner le FQDN<sup data-fn="fc9e2e62-2fcd-4894-9978-6dd24a213c6c" class="fn"><a href="#fc9e2e62-2fcd-4894-9978-6dd24a213c6c" id="fc9e2e62-2fcd-4894-9978-6dd24a213c6c-link">9</a></sup>&nbsp;en lieu et place d’une IP.</p>



<p><strong>PORT :&nbsp;</strong>Prend la valeur une chaine de caractère de type String. Préciser le port d’écoute du serveur SMTP. 25, 587, 465. Libre à chacun.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3134_90bd2f-48"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>5 &#8211; SQLite</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p><strong>DB_NAME :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Permet d’indiquer le nom du fichier de la base de données. Quoi qu’il arrive, l’extension doit être .sqlite ou .sqlite3. Personnellement, j’ai deux fichiers de configuration ou plutôt deux instances. L’une en SS043_EGU_test.sqlite et SS043_EGU.sqlite, comme ça facile de jouer et de debug sans impacter l’instance de production.</p>



<p><strong>DB_PATH :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. L’emplacement de la BDD. Par défaut, l’emplacement se trouve dans le répertoire du répertoire parent sous /database.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3134_1a5060-63"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>6 &#8211; Scheduled Task</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Cette sous partie est assez délicate à traiter car il dépend de deux cas de figure. Le poste est il joint au domaine ou non.</p>



<p>Selon la réponse apporter, le cheminement n’est pas le même.</p>



<p>Dans le cas d’un poste lié au domaine, je recommande maintenant d’user des comptes de services pour une sécurité renforcée (mais qu’est ce qu’il parle bien dit donc…). Il vous sera donc nécessaire de créer un gMSA<sup data-fn="a99b244f-7576-47ce-b0ca-b1376c0babb4" class="fn"><a href="#a99b244f-7576-47ce-b0ca-b1376c0babb4" id="a99b244f-7576-47ce-b0ca-b1376c0babb4-link">10</a></sup>&nbsp;et tout le toutim. Je pourrai faire un billet sur cette fonctionnalité, mais le web relève déjà de plusieurs articles de la sorte. Je passe mon tour cette fois ci.</p>



<p>Dans le cas où la création de gMSA n’est pas possible (une histoire de niveau fonctionnel encore… Mais que font ces SysAdmins ! ) ou que le serveur est hors domaine, il sera nécessaire de créer un compte utilisateur restreints. Dans ce cas précis, il est préférable de définir le compte manuellement et de désactiver la création automatisée.</p>



<p><strong>TASK_ENABLE :&nbsp;</strong>Prend la valeur boolean $true ou $false. Ce paramètre permet d’activer la création automatisée ou non de la tâche planifiée.</p>



<p><strong>TASK_PATH_FOLDERNAME :&nbsp;</strong>Prend la valeur une chaine de caractère de type String. Ce paramètre permet de donner un peu plus de lisibilité dans l’arborescence du planificateur des tâches. Ainsi l’ensemble de mes tâches sont sous \_ronelab\. Ce qui rend bien plus facile la gestion et maintenance de ces dernières.</p>



<p><strong>TASK_NAME :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Va contenir le nom de la tâche. Rien de bien sorcier.</p>



<p><strong>TASK_TRIGGER_HOUR :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Définir l’heure d’exécution de la tâche. Pour ce qui est du jour, ici le paramétrage est en dur dans le code. Pourquoi ? Car je souhaite une exécution quotidienne.</p>



<p><strong>TASK_DOMAIN :&nbsp;</strong>Prend la valeur une chaine de caractère de type String. Indiquer le nom de domaine auquel le server est joint. Dans le cadre d’un compte hors domaine, le nom du serveur est nécessaire.</p>



<p><strong>TASK_USER :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Dans le cadre d’un serveur joint à un domaine il faudra préciser le nom du compte de service suivi du caractère&nbsp;<strong>$</strong>. Il est possible de communiquer un compte utilisateur. Attention toutefois dans le dernier cas à renseigner le mot de passe manuellement, ce dernier n’étant pas pris en compte pour l’instant.</p>
</div></div></div>
</div></div></div>



<p></p>



<p>J’ai ajouté dans la solution la possibilité d’éditer le fichier directement depuis l’interface console. Par sécurité, j’ai ajouté une fonctionnalité de régénération automatique du fichier en cas de suppression ou de corruption. Hé oui, j’en ai eu marre de me repalucher le fichier de configuration plusieurs fois à la mano…</p>



<p>Avec la compréhension du fichier de configuration, je pense que nous pouvons passer à la suite, soit déployer l’application sur le serveur.</p>



<h3 class="wp-block-heading">Installation</h3>



<p>Comme toujours, je dédie une disque et volume pour mon application, 5Go suffit amplement. </p>



<p>Les raisons sont toujours les mêmes et cela reste un point immuable de mon caractère professionnel. Il est impératif de dissocier le système d&rsquo;exploitation des applications ou data pour se prémunir de toutes anomalies du système et d&rsquo;un dépassement d&rsquo;espace de stockage. Nous générons des logs et nous avons une base de données foutre bleu ! (Pourquoi bleu&#8230; Personne n&rsquo;a jamais su m&rsquo;expliquer&#8230;).</p>



<p>l suffit de déposer le répertoire à la racine du lecteur D:\ ou d’ailleurs puis de définir les paramètres du fichier de configuration. Et puis c’est tout. 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="804" height="341" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_007_pratique_config_items.jpg" alt="" class="wp-image-3145" style="width:667px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_007_pratique_config_items.jpg 804w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_007_pratique_config_items-300x127.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_007_pratique_config_items-768x326.jpg 768w" sizes="auto, (max-width: 804px) 100vw, 804px" /></figure>
</div>


<p>Lancer le script SS_43_1.0.0_VMWare-PowerCLI.ps1 pour réaliser les opérations d’initialisation et vérification des dépendances. On me chuchote dans l’oreillette qu’il faut faire un clic droit Exécuter avec Powershell (en tant Administrateur).</p>



<p class="has-text-align-center"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">Attention</mark> : Seule la première initialisation nécessite les droits d&rsquo;administrations.</strong></p>



<p>Lors de la première initialisation <strong>EN MODE MANUEL (MAIN)</strong>, les credentials de connexion vous seront demandés dans le contexte de votre machine et de <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color"><em><strong>VOTRE</strong></em></mark> session pour générer le fichier CLIXML.</p>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="125" class="wp-image-3148" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_1_pratique_cli_menu.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_1_pratique_cli_menu.jpg 463w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_1_pratique_cli_menu-300x68.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="188" class="wp-image-3149" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_2_pratique_cli_menu.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_2_pratique_cli_menu.jpg 462w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_2_pratique_cli_menu-300x103.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p>Dans la première image, nous constatons la présence de 4 menu.</p>



<ul class="wp-block-list">
<li><strong>[01] Edit Configuration</strong> : Permet d&rsquo;ouvrir le fichier de configuration et de modifier ce dernier.</li>



<li><strong>[02] Restore Default Settings :</strong> Permet de lancer un rappel max ou le sort de magie blanche Vie Max / Vie 2 sur le fichier de configuration pour ressusciter, régénérer celui-ci face au spell UTLIMA que vous avez lancé sur ce pauvre fichier ! </li>



<li><strong>[03] Reload Configuration</strong> : Permet de recharger le fichier de configuration et l&rsquo;ensemble des variables de l&rsquo;application.</li>



<li><strong>[04] VCSA Establish Session </strong>: Permet d&rsquo;ouvrir la connexion à l&rsquo;appliance VMWare à partir des éléments transmis plus tôt.</li>
</ul>



<p>Si la connexion aboutie, vous devriez voir apparaitre ce même menu avec d&rsquo;autres options complémentaires.</p>



<ul class="wp-block-list">
<li><strong>[05] VCSA Close Session :</strong> Permet de terminer la session en cours.</li>



<li><strong>[06] Add VCSA Role (CSV File)</strong> : Permet de créer le rôle VMWAre avec les bonnes permissions pour l&rsquo;appliance. Entre nous, je l&rsquo;ai fait une fois et l&rsquo;automatiser et bien&#8230; c&rsquo;est chiant&#8230; C&rsquo;est pourquoi, je dois revoir le fonctionnement. Aujourd&rsquo;hui il est plus simple de le faire manuellement. M&rsquo;enfin c&rsquo;est comme ça.</li>



<li><strong>[07] Single Node Summary</strong> : Permet de faire l&rsquo;inventaire et l&rsquo;affichage des ressources d&rsquo;une single node VMWare dans la console. Je reviendrai sur ce point plus tard. 🙂 Un peu de suspense pardi.</li>



<li><strong>[08] Cluster Node Summary </strong>: La même chose que précédemment mais pour une cluster VMWare avec plusieurs nodes 🙂</li>



<li><strong>[09] VMWare Inventory</strong> : Génère les rapports au format HTML. Je présenterai rapidement la chose, mais de mon point de vue, remplacer par les rapports PowerBI.</li>



<li><strong>[10] Send Bill Report</strong> : Envoi les données par mail pour une potentielle refacturation. </li>
</ul>



<p>Naturellement, si le mode DEBUG est activé et que la redirection des sorties dans un fichier de log également, nous devons avoir en amont les entrées ci-dessous.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="983" height="499" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_3_pratique_cli_menu.jpg" alt="" class="wp-image-3150" style="width:565px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_3_pratique_cli_menu.jpg 983w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_3_pratique_cli_menu-300x152.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_3_pratique_cli_menu-768x390.jpg 768w" sizes="auto, (max-width: 983px) 100vw, 983px" /></figure>
</div>


<p>Concernant le mode Service, le fonctionnement et partiellement le même sans les fonctionnalités manuelles. En gros et pour faire simple, cela suit simplement le cycle de vie :</p>



<ul class="wp-block-list">
<li>Je vérifie les prérequis pour l&rsquo;application</li>



<li>Je m&rsquo;authentifie à l&rsquo;appliance</li>



<li>J&rsquo;exécute mes requetes</li>



<li>Je récupère les données et les stocks dans la BDD</li>



<li>Je me casse Whiskas</li>
</ul>



<p>Donc normalement notre tache planifiée est là. Je passe encore une fois mon tour sur l&rsquo;usage et la création du compte gMSA.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="863" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_4_pratique_cli_menu-1024x863.jpg" alt="" class="wp-image-3153" style="width:427px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_4_pratique_cli_menu-1024x863.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_4_pratique_cli_menu-300x253.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_4_pratique_cli_menu-768x647.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_4_pratique_cli_menu.jpg 1107w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>A ce stade, nous avons donc installé l&rsquo;ensemble des modules (VMware et PSSQLite), déployé la tache planifiée avec le mode service, généré notre BDD et réalisé notre première extraction.</p>



<p>Comme pour GreenRay dans le cas de possible erreur, je rédigerai une quatrième partie KB.</p>



<p>Et maintenant si nous regardions le rendu ? </p>



<h3 class="wp-block-heading">Exploitation des données, Reporting</h3>



<p>Je pense aborder cette partie en 3 axes. Une vue de la console CLI, la vue HTML bien que j&rsquo;hésite encore sur son sort (<a href="https://www.youtube.com/watch?v=6D9vAItORgE&amp;list=RD6D9vAItORgE&amp;start_radio=1&amp;ab_channel=GunsNRosesVEVO">Vivre ou laisser mourrir ?</a>) et pour terminer la partie Microsoft PowerBI.</p>



<p>Mais avant toutes choses, ayant passé un peu moins de 300 heures sur le projet, je vous fournit le modèle de liaison de données (MLD) de ma BDD lié à PBI.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="526" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_5_pratique_cli_menu-1024x526.jpg" alt="" class="wp-image-3155" style="width:430px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_5_pratique_cli_menu-1024x526.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_5_pratique_cli_menu-300x154.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_5_pratique_cli_menu-768x394.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_5_pratique_cli_menu.jpg 1132w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Je ne suis pas satisfait de ma BDD. Il manque un élément crucial. Bien qu&rsquo;implémenté dans le projet GreenRay, je ne l&rsquo;ai pas fait ici. Oui, il n&rsquo;y a pas de log. Ca, voyez vous c&rsquo;est moche&#8230; Aussi moche que Robert HUE au congrès du MEDEF&#8230; </p>



<p>Après bien que ce soit SS_043, il est la première graine, la première application vis à vis de SS_034. D&rsquo;où je crois cet oubli, absence, négligence ou fénéantise de ma part sur la BDD. Pardon SS_043&#8230;</p>



<h4 class="wp-block-heading">CLI View</h4>



<p>Comme vu ci-haut, j&rsquo;ai voulu permettre d&rsquo;un simple petit coup de powershell d&rsquo;afficher la synthèse VMware d&rsquo;un node. Sans pour avoir à jongler d&rsquo;un onglet à l&rsquo;autre dans l&rsquo;interface web ESXi ou VCSA.</p>



<p>C&rsquo;est juste du one shot. Toutefois, je ne pourrais pas montrer de vu CLI d&rsquo;un cluster. Je vous garantit toutefois qu&rsquo;il est fonctionnel. Néanmoins, je ne peux partager les données.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Bref, si nous appuyons sur <strong>[07] Single Node Summary</strong> nous afficherions dans notre console une synthèse de notre hote, l&rsquo;usage CPU, RAM ainsi que l&rsquo;ensemble de la consommation du stockage de chaque datastore.<br><br>Par amusement, j&rsquo;ai même refait l&rsquo;association des VMNic avec les vSwitchs et les groupes de ports&#8230; (Drôle de loisir&#8230;).<br><br>A la base, je voulais savoir si lors d&rsquo;ajout de ressource je pouvais ou non ajouter une ressource virtuelle sans tomber dans le piège de surallocation.</td><td><img loading="lazy" decoding="async" width="650" height="1236" class="wp-image-3157" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_6_pratique_cli_menu.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_6_pratique_cli_menu.jpg 859w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_6_pratique_cli_menu-158x300.jpg 158w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_6_pratique_cli_menu-539x1024.jpg 539w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_6_pratique_cli_menu-768x1460.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_6_pratique_cli_menu-808x1536.jpg 808w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p></p>



<p>La différence avec la vue cluster ? J&rsquo;affiche les informations et configurations de HA et DRS. Toutefois, je dois revoir la configuration réseau. L&rsquo;affichage ne prends pas en compte pour l&rsquo;instant les DVS<sup data-fn="bb2361e4-bb5b-48c7-a749-eaf96c3c490a" class="fn"><a href="#bb2361e4-bb5b-48c7-a749-eaf96c3c490a" id="bb2361e4-bb5b-48c7-a749-eaf96c3c490a-link">11</a></sup>. </p>



<h4 class="wp-block-heading">HTLM Report</h4>



<p>Je partais dans l&rsquo;idée, dans une entreprise de faire dans un petit serveur web un push des données pour que toutes personnes puissent consulter les données. Voilà pourquoi j&rsquo;ai généré des fichiers HTML simple qui reprend les informations CLI vu plus haut en ajoutant une vue par bulle/client.</p>



<p>Pour cela il faudra se rendre dans le sous répertorie export :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="798" height="231" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_7_pratique_cli_menu.jpg" alt="" class="wp-image-3159" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_7_pratique_cli_menu.jpg 798w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_7_pratique_cli_menu-300x87.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_7_pratique_cli_menu-768x222.jpg 768w" sizes="auto, (max-width: 798px) 100vw, 798px" /></figure>
</div>


<p>Cela ouvrira de facto lors de l&rsquo;ouverture du fichier main.html votre navigateur par défaut. L&rsquo;ensemble du site est navigable (oui je me suis fait iech avec les liens hypertextes. En plus ils sont dynamiques selon les données recueillis par l&rsquo;application. J&rsquo;ai fait un effort !).</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Nous retrouvons donc la partie infrastructure avec les informations d&rsquo;inventaire du système puis selon l&rsquo;infrastructure matérielle une synthèse d&rsquo;une infrastructure mononode ou en cluster.<br><br>Ensuite et par bulle, nous avons une synthèse dans l&rsquo;état actuel des ressources consommés.<br><br>Pour la suite, je serai malheureusement contraint d&rsquo;anonymiser certaines données. </td><td><img loading="lazy" decoding="async" width="650" height="800" class="wp-image-3160" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_8_pratique_cli_html.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_8_pratique_cli_html.jpg 699w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_8_pratique_cli_html-244x300.jpg 244w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p class="has-text-align-center"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">Attention</mark> : J&rsquo;ai fait chacune des pages web à la main en mode Notepad++ et ISE. Alors s&rsquo;il vous plait soyez indulgent.</strong></p>


<div class="kb-gallery-wrap-id-3134_5d83af-11 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-3134_5d83af-11 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_9_pratique_cli_html.jpg" width="751" height="668" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_9_pratique_cli_html.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_9_pratique_cli_html.jpg" data-id="3161" class="wp-image-3161 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_9_pratique_cli_html.jpg 751w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_9_pratique_cli_html-300x267.jpg 300w" sizes="auto, (max-width: 751px) 100vw, 751px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html-1024x649.jpg" width="1024" height="649" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html.jpg" data-id="3162" class="wp-image-3162 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html-1024x649.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html-300x190.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html-768x487.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html.jpg 1337w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_11_pratique_cli_html.jpg" width="802" height="592" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_11_pratique_cli_html.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_11_pratique_cli_html.jpg" data-id="3163" class="wp-image-3163 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_11_pratique_cli_html.jpg 802w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_11_pratique_cli_html-300x221.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_11_pratique_cli_html-768x567.jpg 768w" sizes="auto, (max-width: 802px) 100vw, 802px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html-634x1024.jpg" width="634" height="1024" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html.jpg" data-id="3164" class="wp-image-3164 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html-634x1024.jpg 634w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html-186x300.jpg 186w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html-768x1241.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html-950x1536.jpg 950w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html.jpg 1071w" sizes="auto, (max-width: 634px) 100vw, 634px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p>Il reste encore du boulot, j&rsquo;ai trouvé ça fun et rigolo à développer. M&rsquo;enfin c&rsquo;est juste ma spécialité (le gars modeste&#8230;). Ma spécialité c&rsquo;est de réinventer la roue 🙂</p>



<h4 class="wp-block-heading">PowerBI Report</h4>



<p>Là, contrairement aux deux modèles de reporting ci-haut vise un tout autre dimension. Car là nous allons pouvoir élargir notre vision dans le temps en affichant et travaillant sur un historique des ressources.</p>



<p>En des mots plus simple, l&rsquo;évolution sur 13 mois glissant des ressources. 🙂</p>



<p>Ouvrer le fichier présent dans le répertoire Report.</p>



<p>Une fois ouvert, changer la source de données. Sinon vous allez avoir une erreur ODBC. Naturellement les drivers ODBC pour SQLite ont été installé préalablement sinon c’est la mort assurée…</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3134_76fcc7-47 kt-accordion-has-3-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3134_8107d8-ce"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Paramétrage de la source</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Depuis l’application PowerBI,&nbsp;<em>Fichier &gt; Options et paramètres &gt; Paramètres de la source de données</em>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="557" height="608" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_1_report.jpg" alt="" class="wp-image-3051" style="width:209px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_1_report.jpg 557w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_1_report-275x300.jpg 275w" sizes="auto, (max-width: 557px) 100vw, 557px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3134_47ccc0-c7"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Changer la source existence</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>S’affiche à vous la configuration où charger les données. Il y a de forte chance que vous vous retrouviez avec l’un de mes Paths. Changer alors le chemin pour pointer vers votre BDD.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="795" height="622" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_2_report.jpg" alt="" class="wp-image-3054" style="width:408px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_2_report.jpg 795w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_2_report-300x235.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_2_report-768x601.jpg 768w" sizes="auto, (max-width: 795px) 100vw, 795px" /></figure>
</div>


<p>Dans la nouvelle fenêtre qui apparait, en premier lieu sélectionner en source de données&nbsp;<strong>SQLite3 Datasource</strong>. Modifier le chemin afin que celui soit de la forme&nbsp;<strong>database=&lt;path&gt;</strong>.</p>



<p>En guise de clause de réduction de ligne, choisissez&nbsp;<strong>LIMIT</strong>, puis confirmer la modification.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="694" height="524" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_13_pratique_cli_html.jpg" alt="" class="wp-image-3167" style="width:487px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_13_pratique_cli_html.jpg 694w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_13_pratique_cli_html-300x227.jpg 300w" sizes="auto, (max-width: 694px) 100vw, 694px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3134_03e169-92"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Chargement des données</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Il ne reste alors qu’à charger, actualiser les données dans le rapport existant.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="548" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_14_pratique_cli_html-1024x548.jpg" alt="" class="wp-image-3168" style="width:686px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_14_pratique_cli_html-1024x548.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_14_pratique_cli_html-300x160.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_14_pratique_cli_html-768x411.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_14_pratique_cli_html-1536x822.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_14_pratique_cli_html.jpg 1916w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Normalement et il y a peu de chance que ce ne soit pas le cas, vous devriez avoir une multitude de coche vert en face de chaque table vous annonçant que les données ont été chargé avec succès.</p>
</div></div></div>
</div></div></div>



<p></p>



<p>Une fois les données actualisées, vous devriez avoir le rendu ci-dessous par défaut. Il vous faudra alors jouer avec les différents filtres et objets de contrôles sur les pages pour coller à vos données.</p>


<div class="kb-gallery-wrap-id-3134_d03683-5c alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-slider kb-gallery-id-3134_d03683-5c kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-fade="true" data-slider-dots="true" data-slider-type="slider" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-slider splide__list"><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi-1024x575.jpg" width="1024" height="575" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi.jpg" data-id="3169" class="wp-image-3169 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi-1024x575.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi-300x168.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi-768x431.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi.jpg 1313w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi-1024x577.jpg" width="1024" height="577" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi.jpg" data-id="3170" class="wp-image-3170 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi-1024x577.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi-768x433.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi.jpg 1311w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi-1024x577.jpg" width="1024" height="577" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi.jpg" data-id="3171" class="wp-image-3171 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi-1024x577.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi-768x433.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi.jpg 1312w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi-1024x574.jpg" width="1024" height="574" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi.jpg" data-id="3172" class="wp-image-3172 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi-1024x574.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi-300x168.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi-768x430.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi.jpg 1314w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi-1024x575.jpg" width="1024" height="575" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi.jpg" data-id="3173" class="wp-image-3173 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi-1024x575.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi-300x168.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi-768x431.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi.jpg 1316w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi-1024x577.jpg" width="1024" height="577" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi.jpg" data-id="3174" class="wp-image-3174 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi-1024x577.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi-768x433.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi.jpg 1312w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi-1024x576.jpg" width="1024" height="576" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi.jpg" data-id="3175" class="wp-image-3175 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi-1024x576.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi-768x432.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi.jpg 1311w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi-1024x576.jpg" width="1024" height="576" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi.jpg" data-id="3176" class="wp-image-3176 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi-1024x576.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi-768x432.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi.jpg 1312w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi-1024x577.jpg" width="1024" height="577" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi.jpg" data-id="3177" class="wp-image-3177 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi-1024x577.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi-768x433.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi.jpg 1314w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p>Rappelons nous notre problématique initiale. Je dis nous, mais au final c&rsquo;est bien à moi de me rappeler ma problématique. Je pense que cette dernière est répondue avec un peu plus de fonctionnalité que prévu.</p>



<p>Ainsi, nous avons une visibilité totale sur l&rsquo;ensemble du SI et des éléments virtuels qui le composent. Nous pouvons également donner la tendance et l&rsquo;évolution dans le temps justifiant à la demande interne ou externe d&rsquo;un potentiel sur ou sous facturation. Elle permet également dans l&rsquo;application de la bonne licence Microsoft O365 de publier le modèle et donc de partager l&rsquo;information à d&rsquo;autres collaborateurs en temps réel.</p>



<p>Certains filtres restent toutefois à adapter selon ce que nous souhaitons afficher ou interpréter. Pour le reste, je vous laisse regarder les différents chevaux de mon carrousel ci-haut.</p>



<p>Comme pour l&rsquo;article précédent, je pense faire une vidéo de démonstration (que je n&rsquo;ai pas fait pour l&rsquo;instant d&rsquo;ailleurs. Non pas par fénéantise. Mais par épuisement moral. Il faut que je pense <a href="https://www.youtube.com/watch?v=7bq8Yu_E9qw&amp;list=RD7bq8Yu_E9qw&amp;start_radio=1&amp;ab_channel=StupeflipOfficiel">à Rosetta, à ressources humaines</a>&#8230; Bref, je suis content de ce que j&rsquo;ai rendu et accouché. Toutefois, il reste encore un peu d&rsquo;ajustement. Dommage que cela ne puisse être utilisé au quotidien dans ma profession et ce pour des sujets de droit à la propriété intellectuelle. </p>



<p>A ce moment précis de mon second break, il se passe huit mois entre le début des première ligne de code et la fin de rédaction de cet article. Il me fallait terminer ce projet qui je le pense ne doit pas finir aux oubliettes. J&rsquo;aimerai qu&rsquo;il puisse à terme rendre service à d&rsquo;autres SysAdmins et s&rsquo;adapter à d&rsquo;autres systèmes, socles de virtualisation.</p>



<h3 class="wp-block-heading">Sources</h3>



<ul class="wp-block-list">
<li><a href="https://www.microsoft.com/fr-fr/power-platform/products/power-bi/downloads">Microsoft PowerBI</a></li>



<li><a href="http://www.ch-werner.de/sqliteodbc/">SQLite ODBC Driver</a></li>



<li><a href="https://sqlitebrowser.org/dl/">DB Browser SQLite</a></li>



<li><a href="https://developer.broadcom.com/powercli/latest/products/vmwarevsphereandvsan/">VMWare PowerCLI</a></li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-1-theorie/">Partie 1 : Théorie<br>&lt;-</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi/">PROJET &#8211; Dream Nebula</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-3-demonstration/">Partie 3 : Démonstration<br>—></a></td></tr></tbody></table></figure>



<p></p>


<ol class="wp-block-footnotes"><li id="c2fa8834-05a4-4bc2-92dd-aa0fe3b68489"><strong>TLS</strong> : Transport Layer Security  <a href="#c2fa8834-05a4-4bc2-92dd-aa0fe3b68489-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="4b387ac7-d458-4404-94be-041eac1df36a"><strong>ODBC</strong> : Open Database Connectivity  <a href="#4b387ac7-d458-4404-94be-041eac1df36a-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="fea49933-c957-436d-b291-535ce6c4e1e8"><strong>DB</strong> : Database <a href="#fea49933-c957-436d-b291-535ce6c4e1e8-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="0f1cb5c5-cbaa-458f-ba19-d4ce7153e316"><strong>VCSA</strong> : VMware System Appliance <a href="#0f1cb5c5-cbaa-458f-ba19-d4ce7153e316-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="84b0b406-fc6f-443c-a541-0ebf607c41f1"><strong>API</strong> : Application Programming Interface <a href="#84b0b406-fc6f-443c-a541-0ebf607c41f1-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="52980565-3e3c-49b0-b7af-7317334f7fb9"><strong>SMTP</strong> : Simple Mail Transport Protocol <a href="#52980565-3e3c-49b0-b7af-7317334f7fb9-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="70c9a30b-c61d-4e80-9e38-3b36d25b68ed"><strong>LD</strong> : Liste Distribuée  <a href="#70c9a30b-c61d-4e80-9e38-3b36d25b68ed-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="d60f938e-acfd-4304-9be7-299a91ca7350"><strong>BAL</strong> : Boite aux lettres <a href="#d60f938e-acfd-4304-9be7-299a91ca7350-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="fc9e2e62-2fcd-4894-9978-6dd24a213c6c"><strong>FQDN</strong> : Fully Qualified Domain Name <a href="#fc9e2e62-2fcd-4894-9978-6dd24a213c6c-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="a99b244f-7576-47ce-b0ca-b1376c0babb4"><strong>gMSA</strong> : Group Managed Service Accounts <a href="#a99b244f-7576-47ce-b0ca-b1376c0babb4-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="bb2361e4-bb5b-48c7-a749-eaf96c3c490a"><strong>DVS</strong> : Distributed Virtuals Switchs <a href="#bb2361e4-bb5b-48c7-a749-eaf96c3c490a-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li></ol>


<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Dream Nebula, VMWare KPI Partie 1 : Théorie</title>
		<link>https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-1-theorie/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sun, 07 Sep 2025 18:52:12 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[VEEAMONE]]></category>
		<category><![CDATA[VMWare]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3101</guid>

					<description><![CDATA[Expression du besoin Des outils qui permettent de réaliser un suivie de la charge d&#8217;une infrastructure il en existe un certain nombre. J&#8217;ai donc ce besoin de suivre mon SI et de définir de manière simple pour l&#8217;instant un planning de capacité de mon environnement VMWare qu&#8217;il soit basé sur une architecture standalone ou distribuée....]]></description>
										<content:encoded><![CDATA[


<h3 class="wp-block-heading">Expression du besoin</h3>



<p>Des outils qui permettent de réaliser un suivie de la charge d&rsquo;une infrastructure il en existe un certain nombre. J&rsquo;ai donc ce besoin de suivre mon SI<sup data-fn="7caccef3-d6ea-44ac-bcee-b6eb363a4cd4" class="fn"><a href="#7caccef3-d6ea-44ac-bcee-b6eb363a4cd4" id="7caccef3-d6ea-44ac-bcee-b6eb363a4cd4-link">1</a></sup> et de définir de manière simple pour l&rsquo;instant un planning de capacité de mon environnement VMWare qu&rsquo;il soit basé sur une architecture standalone ou distribuée.</p>



<p>Toutefois, ce qui est emmerdant encore et toujours c&rsquo;est le cout lié à ces solutions. Logique, car cela demande un certain recul et analyse et d&rsquo;être flexible aux diverses solutions des éditeurs de virtualisation. Coucou VEEAMOne 🙂 Il existe aussi des solutions gratuites mais cela nécessite de manipuler ensuite les données retournées. Oui je pense à toi mon bon vieux RVTools. </p>



<p>De mon expérience d&rsquo;administrateur système et réseau, j&rsquo;ai constaté (comme je me suis fait avoir d&rsquo;ailleurs) un manque crucial des équipes à tenir comptes des ressources matériels de leurs infrastructures. Que ce soient des jeunes loups qui viennent d&rsquo;entrer sur le marché du travail ou de certains vieux loups charlot qui opère encore dans le milieu&#8230; C&rsquo;est ainsi que les problématiques de surallocation des ressources voient le jour :</p>



<ul class="wp-block-list">
<li>Memory Balloning</li>



<li>Storage Overprovisionned</li>



<li>Storage Latency</li>



<li>CPU Exhausted</li>



<li>etc</li>
</ul>



<p>Dans la grande majorité des cas, un suivi fin de l&rsquo;exploitation permet d&rsquo;éviter ce genre de cas de figure et dans d&rsquo;autres cas de prévenir sa direction ou son client d&rsquo;une évolution d&rsquo;infrastructure à budgéter. L&rsquo;une de mes bonnes pratiques (surtout celle que mes mentors m&rsquo;ont transmises) et de prendre le SI de production et de prendre 20% de plus pour se prémunir des potentiels changements à venir et garder de l&rsquo;évolutivité.</p>



<p>L&rsquo;extraction des indicateurs de performance du SI permettra ainsi sur le plan technique de s&rsquo;assurer de la charge et allocation de chacune des ressources matérielles et de définir l&rsquo;allocation des ressources par services au plus bas niveau. Sur le plan financier et administratif cela permet de prévoir les investissements du SI tout comme il permet de refacturer en interne différents services. Derniers points qui peut-être marque d&rsquo;espièglerie, la DSI<sup data-fn="f5f385b9-0521-48d0-90f7-47fa952abf1e" class="fn"><a href="#f5f385b9-0521-48d0-90f7-47fa952abf1e" id="f5f385b9-0521-48d0-90f7-47fa952abf1e-link">2</a></sup> ou Direction peut se rendre compte des conseils et des compétences du RSI<sup data-fn="4c979ee1-94ba-4da9-8f0b-eb8513606344" class="fn"><a href="#4c979ee1-94ba-4da9-8f0b-eb8513606344" id="4c979ee1-94ba-4da9-8f0b-eb8513606344-link">3</a></sup>.</p>



<p>Dans le contexte d&rsquo;un petit fournisseur de service (je ne parle pas des OVH, AWS et autres mastodontes), il est difficile de facturer les ressources aux clients de la manière la plus juste possible sans tomber dans le cas de surfacturation ou sou facturation. Ces indicateurs permettent donc de justifier le cout et l&rsquo;évolution des ressources mis à leurs dispositions sur leurs demandes.</p>



<p>Il est donc nécessaire de trouver une solution qui permet d&rsquo;assurer un suivie de l&rsquo;infrastructure sur une durée défini qui puisse être orienté MSP<sup data-fn="7033a964-de8a-427d-b0e4-5dbca04c3d71" class="fn"><a href="#7033a964-de8a-427d-b0e4-5dbca04c3d71" id="7033a964-de8a-427d-b0e4-5dbca04c3d71-link">4</a></sup> comme pour un client final. D&rsquo;assurer une visibilité macroscopique jusqu&rsquo;au plus bas niveau des ressources. Tout comme pour l&rsquo;article précédent GreenRay, il est important de décorréler la partie métrique et son rendu. Le service qualité doit pouvoir exploiter et présenter les métriques dans la plus grande transparence et honnêteté qu&rsquo;il soit. (Surtout c&rsquo;est le boulot de la qualité de rendre sexy un truc qui de base ne l&rsquo;est pas trop, sauf pour les AdminSys dans mon genre 🙂 ).</p>



<h3 class="wp-block-heading">Cahier des Charges</h3>



<p>Ok, on voit où l&rsquo;on veut aller. Pensons maintenant à partir de ce qui est établi comment mettre en œuvre tout ça sans tomber dans l&rsquo;éternelle piège de la dispersion et donc de ne voir aboutir ce projet. Encore une fois, mon esprit aura fait des siennes et le projet au final va comporter des fonctionnalités encore en cours de développement&#8230; Oui je suis comme ça et je ne compte pas changer dans le cadre de mes loisirs.</p>



<p>Nous resterons dans un premier temps sur le socle de virtualisation VMware (et ce même si BROADCOM est passé par là avec son chéquier) et les produits vSphere de base (comprendre VCSA et ESXi) et donc son API<sup data-fn="780843c6-2ef0-45df-8125-19503166d39c" class="fn"><a href="#780843c6-2ef0-45df-8125-19503166d39c" id="780843c6-2ef0-45df-8125-19503166d39c-link">5</a></sup>. (Donnez moi le moyen de faire cela pour les socles de virtualisation PROXMOX, AHV et HyperV, JE VOUS SUIS !).</p>



<p>Je souhaite également utiliser la solution VEEAMOne pour bénéficier de la gestion des TAGS de manière automatique dans l&rsquo;environnement VMware. L&rsquo;aillant déjà déployé et configuré (cf le billet en question), autant en profité. Ce point est optionnel et nous pouvons nous passer de ce dernier. Il est tout à fait possible d&rsquo;administrer les TAGS directement dans l&rsquo;environnement vCenter.</p>



<p class="has-text-align-center"><strong>Pourquoi tu parles de TAGS ?</strong></p>



<p>Les TAGS ou marqueurs vont me permettre d&rsquo;identifier les ressources virtuelles. Par exemple d&rsquo;identifier les ressources virtuelles propres au bon fonctionnement de l&rsquo;infrastructure et les ressources virtuelles propres à la production et donc au bon fonctionnement de l&rsquo;organisation. Cela permet d&rsquo;avoir un ratio <strong>Production/Infrastructure</strong>.</p>



<p>Il en va ainsi de même pour les services IaaS<sup data-fn="e7aae3df-f718-4618-83e3-9b14d433a6ee" class="fn"><a href="#e7aae3df-f718-4618-83e3-9b14d433a6ee" id="e7aae3df-f718-4618-83e3-9b14d433a6ee-link">6</a></sup>, SaaS<sup data-fn="8cdf59ce-9608-4bf6-a41e-a301fbdbfd8b" class="fn"><a href="#8cdf59ce-9608-4bf6-a41e-a301fbdbfd8b" id="8cdf59ce-9608-4bf6-a41e-a301fbdbfd8b-link">7</a></sup> et pourquoi pas par environnement de service, réseau ou clients (dans le cas d&rsquo;un MSP).</p>



<p>Les TAGs permettront d&rsquo;apporter une finesse dans l&rsquo;analytique.</p>



<p>Si nous faisons une petite synthèse, la solution doit pouvoir se connecter à l&rsquo;API VCSA<sup data-fn="d72df66d-e2e2-4a72-a31d-9c5af091a4cb" class="fn"><a href="#d72df66d-e2e2-4a72-a31d-9c5af091a4cb" id="d72df66d-e2e2-4a72-a31d-9c5af091a4cb-link">8</a></sup> by VMware. De nouveau la question, quel langage utilisé ? <a href="https://www.youtube.com/watch?v=fNq-qi4ld3Y&amp;ab_channel=Lacha%C3%AEneofficiellePok%C3%A9monenfran%C3%A7ais">JE TE CHOISIS</a> ! Framework .Net avec powershell afin d’établir un mode manuel et un mode service. Certes pas esthétique mais avons-nous réellement besoin d’une interface GUI<sup data-fn="9c2f2bb2-e9c7-46eb-9f91-0419e30a53b9" class="fn"><a href="#9c2f2bb2-e9c7-46eb-9f91-0419e30a53b9" id="9c2f2bb2-e9c7-46eb-9f91-0419e30a53b9-link">9</a></sup>&nbsp;pour l’instant&nbsp;? Naturellement, il est obligatoire que la solution laisse une trace de son exécution dans un fichier et ce à des fins de debug et de contrôle.</p>



<p>L’outil comportant un mode service, ce dernier doit être planifié de manière journalière pour traiter le point de suivi des métriques sur une durée donnée.</p>



<p>Les données seront stockées dans une base de données flexible et légère qui puisse être utilisé en dehors de la production et s’interfacer rapidement avec tous types de systèmes. Je propose d’utiliser SQLite3.</p>



<p>Concernant la partie exploitation et génération des métriques, j’ai pris parti d’utiliser PowerPI pour des raisons de praticité et de gain de temps. J&rsquo;avais par le passé compiler les informations dans un fichier excel mais force est de constater que la solution n&rsquo;est pas viable dans le temps en termes de gestion. L&rsquo;avantage d&rsquo;une BDD<sup data-fn="43da8cff-22fe-4897-a22f-2f19b0daa69f" class="fn"><a href="#43da8cff-22fe-4897-a22f-2f19b0daa69f" id="43da8cff-22fe-4897-a22f-2f19b0daa69f-link">10</a></sup> comme source de données et qu&rsquo;elle reste interfaçable avec tous types de solutions (Web, Application lourde ou encore et toujours le terrible tableur Excel).</p>



<p>Pour la partie sécurité, nous resterons concernant la consultation des données VMware sur un compte restreint en lecture seul (pas besoin de plus et encore on peut affiner les droits de manière drastique). Quant à l’exécution de la tâche planifiée dédiée au mode service un compte gMSA<sup data-fn="877a5f5e-81d0-40d2-b6c1-518e10f35b59" class="fn"><a href="#877a5f5e-81d0-40d2-b6c1-518e10f35b59" id="877a5f5e-81d0-40d2-b6c1-518e10f35b59-link">11</a></sup> répondra à toutes les problématiques (dans le cas d&rsquo;un poste joint à un domaine), sinon cela un compte local restreint. J&rsquo;oubliais également que les informations d&rsquo;identification seront chiffrées nativement par le SE<sup data-fn="47c14572-16cd-4a96-a53c-11d8d51d7015" class="fn"><a href="#47c14572-16cd-4a96-a53c-11d8d51d7015" id="47c14572-16cd-4a96-a53c-11d8d51d7015-link">12</a></sup> Windows dans le contexte d&rsquo;exécution du poste et de la session.</p>



<p>En conclusion de notre liste de course, notre application utilisera&nbsp;:</p>



<ul class="wp-block-list">
<li><strong>Connecteur API à l&rsquo;Appliance VCSA VMware</strong><ul><li>Orienté MSP et SI finaux</li></ul>
<ul class="wp-block-list">
<li>Couvrir les architectures standalone et distribuée</li>



<li>Suivre les ressources virtualisées</li>



<li>Suivre les ressources matérielles</li>
</ul>
</li>



<li><strong>Langage de développement &amp; Fonctionnalités</strong>
<ul class="wp-block-list">
<li>.NET Framwork à travers Powershell (v5 ou plus)</li>



<li>Journalisation de l’exécution du code</li>



<li>Export des données en CSV et HTLM</li>



<li>Mode manuel et mode service</li>



<li>Fichier de configuration</li>



<li>Aide au déploiement</li>



<li>Visualisation en mode CLI</li>
</ul>
</li>



<li><strong>SGBD</strong>
<ul class="wp-block-list">
<li>SQLite3</li>
</ul>
</li>



<li><strong>Reporting</strong>
<ul class="wp-block-list">
<li>Microsoft PowerBI</li>
</ul>
</li>



<li><strong>Securité</strong>
<ul class="wp-block-list">
<li>Si poste au domaine, création et utilisation d’un compte de service gMSA dédiéSi hors domaine, création d’un compte restreint au poste</li>



<li>Chiffrement des données d&rsquo;authentification par les algorithmes natives Windows</li>



<li>Token API en lecture seule sur la VCSA</li>
</ul>
</li>
</ul>



<p>Il est temps de passer à la construction et définissions de nos différents niveaux de topographie d’architecture, applicative et logiciel.</p>



<h4 class="wp-block-heading">Topographie &#8211; Infrastructure</h4>



<p>La topographie a été pensé pour être la plus simple et standard (pour faciliter la gestion et l&rsquo;évolution de l&rsquo;application). J&rsquo;ai fait le choix de tout embarqué dans l&rsquo;application, mais il est toutefois possible de mettre en place une architecture 2 ou 3 tiers en dissociant les parties Engine, Reporting et BDD.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="496" src="https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_infra-1024x496.jpg" alt="" class="wp-image-3113" srcset="https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_infra-1024x496.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_infra-300x145.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_infra-768x372.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_infra.jpg 1267w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>En d&rsquo;autres termes, il est seulement nécessaire dans le cadre d&rsquo;une architecture 1 tiers d&rsquo;autoriser la communication des flux https/tcp entre l&rsquo;appliance vCenter et notre application.</p>



<h4 class="wp-block-heading">Topographie &#8211; Applicative</h4>



<p>Depuis mon dernier gros projet, je suis désolé de vous apprendre que je ne suis toujours pas architecte applicatif. <a href="https://www.youtube.com/watch?v=3B409cK9IgI&amp;list=RD3B409cK9IgI&amp;start_radio=1&amp;ab_channel=Hubert-F%C3%A9lixThi%C3%A9faine-Topic">Renseignez vous, à l&rsquo;agence des amants de Madame Müller</a>, j&rsquo;ai des restes ! </p>



<p>A la racine du répertoire, nous retrouvons les deux fichiers exécutables :</p>



<ul class="wp-block-list">
<li><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#45c832" class="has-inline-color">SS_43_1.0.0_VMWare-PowerCLI_Main.ps1</mark></strong> : Qui est le fichier d’instanciation de la solution est qui permet également de réaliser toutes les actions en mode manuel.</li>



<li><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#20d2e6" class="has-inline-color">SS_43_1.0.0_VMWAre-PowerCLI_Services.ps1</mark></strong> : Presque le même fichier que le fichier Main mais dédié au mode service avec un code adapté. Il ne peut être exécuté si et seulement si l’instanciation et initialisation à eu lieu.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="650" height="782" src="https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_appl.jpg" alt="" class="wp-image-3115" style="width:500px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_appl.jpg 650w, https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_appl-249x300.jpg 249w" sizes="auto, (max-width: 650px) 100vw, 650px" /></figure>
</div>


<p>La suite se déroule en 6 répertoires distincts.</p>



<ul class="wp-block-list">
<li><strong>Modules :</strong>&nbsp;Répertoire contenant les modules powershell développé pour l’application. Aujourd’hui au nombre de quatre dissociant la partie BDD, Windows, HTML et VMware.</li>



<li><strong>Database :</strong>&nbsp;Répertoire contenant la BDD qui va stocker les données. La SGBD&nbsp;étant sous SQLite il n’y a pas besoin de moteur SQLite. Seul le module SQLite pour powershell est nécessaire en termes de dépendance. La base de données est automatiquement générée si cette dernière n’est pas présente ou si cette dernière à un nom qui diffère du fichier de configuration. Uniquement lors de l’exécution du script en mode manuel.</li>



<li><strong>Config :</strong>&nbsp;Répertoire contenant le fichier de configuration powershell. Effectivement depuis des années je faisais ça directement dans le code… Je mourrai moins con ce soir comme dirait quelqu’un que je connais bien 🙂 Je reviendrai plus en détail sur la partie 2 sur le contenu de ce fichier. Afin de palier à toute suppression malencontreuse du fichier de configuration, j’ai développé une fonction pour regénérer ce dernier. Oui je suis adepte du&nbsp;<strong>Alt+Maj+Del</strong>&nbsp;et j’ai dû recommencer mon fichier. Maintenant plus de problème avec mon combo favori &lt;3</li>



<li><strong>Report :</strong>&nbsp;Là où je stocke les fichiers Microsoft PowerBI. Je reviendrais sur ce point dans la partie 2.</li>



<li><strong>Log :</strong>&nbsp;Répertoire qui va contenir la ou les traces d’exécution du code si l’option est activée. Cela à son importance car il permet au petit gars qui à dev l’application dans sa baignoire de corriger les bugs. Le fichier ne prend pas de place et est réinitialiser à chaque lancement.</li>



<li><strong>Export :</strong>&nbsp;Répertoire qui va contenir les données extraites selon les tags dans des rapports HTMLs. Les rapports ont été pensé pour être navigable et donc faciliter la consultation des rapports dans un navigateur internet. Cette fonctionnalité a été abandonnée pour l&rsquo;instant car retranscrit dans PBI<sup data-fn="60113356-51cf-40c6-ba4d-76f5d785982a" class="fn"><a href="#60113356-51cf-40c6-ba4d-76f5d785982a" id="60113356-51cf-40c6-ba4d-76f5d785982a-link">13</a></sup>. Mais cette fonctionnalité à le droit d&rsquo;être finalisé et elle le sera. 🙂</li>



<li><strong>Import :</strong> Répertoire qui va contenir les sources CSV avec les permissions à définir le plus finement possible sur l&rsquo;environnement VMware.</li>
</ul>



<p>Il est important de noter que le script manuel et le script de service peuvent être dissocier. Ce qui se traduit dans un sens par je peux utiliser un serveur en mode type console avec l’outil manuel et garder l’automatisation sur un serveur avec uniquement le strict nécessaire.</p>



<h4 class="wp-block-heading">Topographie &#8211; Logiciel</h4>



<p>Comme toujours le code peut être optimisé, factorisé. Néanmoins, je considère cette version béta comme stable. Bien que par moment quelques ajustements restent nécessaire et quelques fonctionnalités ont besoin d&rsquo;être finalisées. De plus, je pense sincèrement que d&rsquo;autres cerveaux et d&rsquo;autres idées permettraient de pousser plus loin certaines fonctionnalités existantes et de voir d&rsquo;autres fonctionnalités naitre.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="819" src="https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_003_topo_logiciel-1024x819.jpg" alt="" class="wp-image-3122" style="width:466px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_003_topo_logiciel-1024x819.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_003_topo_logiciel-300x240.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_003_topo_logiciel-768x614.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_003_topo_logiciel-1536x1229.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_003_topo_logiciel.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="has-text-align-center"><em><strong>Oh ! La flemme du type qui ne veut pas se palucher un visio et montrer qu&rsquo;il bosse encore à l&rsquo;ancienne genre papier/crayon !</strong></em></p>



<p>Dans son fonctionnement, nous pourrions voir le fonctionnement suivant :</p>



<ul class="wp-block-list">
<li><strong>0</strong>&nbsp;: Contrôle et vérification des prérequis. Pour simplifier la chose, lecture du fichier de configuration vérification de la BDD et tout le toutim. Et dans une certaine mesure, création de la tâche planifiée</li>



<li><strong>1</strong>&nbsp;: Appel API vers l&rsquo;appliance VMWare afin d’établir la connexion à l&rsquo;appliance et réaliser les opérations de lecture nécessaire</li>



<li><strong>2</strong>&nbsp;: Traitement des données retournée par l’API VMWare afin de stocker ces dernières dans la SGBD, naturellement si l’option est activée l’ensemble des sorties consoles sont redirigées dans un fichier de log</li>



<li><strong>3</strong>&nbsp;: Laisser la possibilité d&rsquo;exploitation des données
<ul class="wp-block-list">
<li><strong>3.1 </strong>: PS Output (cli) pour un affichage rapide des données dans la console powershell avec un affichage user friendly des performances et ressources VMWare (sinon tu as quasi la même chose dans la partie Dashboard de VMWare tu sais ?)</li>



<li><strong>3.2</strong> : HTML Output pour générer une synthèse navigable par bulles et environnements virtuels</li>
</ul>
</li>



<li><strong>4</strong>&nbsp;: Envoi d&rsquo;une notification mail via le protocole SMTP pour informer du bon succès de la tâche.</li>



<li><strong>5</strong>&nbsp;: Possibilité d&rsquo;exploitation dans Microsoft PowerBI.
<ul class="wp-block-list">
<li>Une fois le modèle en place de reporting (PowerBI) configuré (comprendre faire les jointures dans l’application), rafraichir les données. Modification des filtres dans un objectif d&rsquo;exploitation</li>
</ul>
</li>
</ul>



<p>Comme d&rsquo;accoutumé, je ne présente pas pour l&rsquo;instant les différents bouts de code. Les raisons ? Toujours les mêmes. Première ça serait indigeste ici (bien que pour ça il y a GitHub), la seconde étant que je ne souhaite pas que mes travaux s&rsquo;évaporent dans la nature. Et j&rsquo;ajoute une troisième raison. Vous savez ce que vous pouvez « potentiellement recruter » dans votre équipe interne. (Oui, j&rsquo;ai toujours en travers mon dernier entretien professionnel où je n&rsquo;étais pas assez technique&#8230; Mais ce de bonne guerre #coeuraveclesmains). Je me pose toutefois la question et laisse part à la réflexion de rendre mon projet communautaire.</p>



<h3 class="wp-block-heading">Sécurité</h3>



<p>A ce moment de la rédaction, je ne vois qu&rsquo;un point négatif sur l&rsquo;ensemble du projet qui nécessite d&rsquo;être amélioré. Ce point concerne la partie SGBD.</p>



<h4 class="wp-block-heading">SGBD</h4>



<p>Comme pour le projet GreenRay, la problématique est la même. Tout reste à faire&#8230; Bien que la BDD ne contienne pas de données sensibles pouvant nuire à la sécurité du SI cette BDD reste conforme à la législation en vigueur avec la RGPD<sup data-fn="3c50d356-83ec-421e-aab0-2abcf8969aff" class="fn"><a href="#3c50d356-83ec-421e-aab0-2abcf8969aff" id="3c50d356-83ec-421e-aab0-2abcf8969aff-link">14</a></sup>.</p>



<p>Toutefois, le choix de SQLite et de son caractère singulier cross plateforme nécessite de sécuriser son contenu et intégrité. Hors, de ce côté là, pas de chiffrement de la BDD ni de côte d&rsquo;accès. Alors comme dans le projet précédent il faudrait envisager de développer d&rsquo;autres plugins pour d&rsquo;autres SGBDs relationnels.</p>



<p>Une sécurité de base, serait de paramétrer les ACLs afin que le fichier de BDD ne soit accessible que du compte de service et des comptes utilisateurs habilités à lancer l’application en manuel.</p>



<p class="has-text-align-center"><strong>Concernant le MCD&#8230; Toujours le même dilemme&#8230; </strong></p>



<p><a href="https://www.youtube.com/watch?v=x537Cqg5nEI&amp;list=RDx537Cqg5nEI&amp;start_radio=1&amp;ab_channel=SalutCestCoolVEVO">Toujours pareil ! Boum boum dans les oreilles !</a> Le MCD<sup data-fn="23c46418-bc3e-4a85-a9f1-52465592290f" class="fn"><a href="#23c46418-bc3e-4a85-a9f1-52465592290f" id="23c46418-bc3e-4a85-a9f1-52465592290f-link">15</a></sup> a été pensé sur papier puis construit sur les bases d&rsquo;un modèle existant&#8230; Partager le MCD revient à publier mon code finalement. Avec un peu d&rsquo;huile de coude et de reverse engineering vous me remiserez au placard.</p>



<p>Pis bon, je vois venir les SysDBAs<sup data-fn="7ae3a458-32c1-46f0-94df-1d88c1ba70e4" class="fn"><a href="#7ae3a458-32c1-46f0-94df-1d88c1ba70e4" id="7ae3a458-32c1-46f0-94df-1d88c1ba70e4-link">16</a></sup> me dire que c&rsquo;est pas MERISE nanani nanana&#8230; La structure de la BDD n&rsquo;était pas d&rsquo;une complexité folle, cette dernière n&rsquo;était composée que de 13 tables.</p>



<h4 class="wp-block-heading">VMware</h4>



<p>Concernant VMWare, j&rsquo;ai pensé à deux approches. Une approche d&rsquo;authentification à travers une jonction à un domaine et à l&rsquo;authentification locale.</p>



<p>Dans les deux cas, j&rsquo;ai choisi de limiter l&rsquo;accès en lecture seul. L&rsquo;objectif du projet étant rappelons le de suivre et d&rsquo;interpréter dans le temps l&rsquo;évolution des infrastructures et non d&rsquo;interagir par une méthode tierce. Ce qui renforce la sécurité. Toutefois, il sera nécessaire d&rsquo;attribuer les droits manuellement bien que cela pourrait s&rsquo;automatiser.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="652" src="https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_1_topo_logiciel_vmware-1024x652.jpg" alt="" class="wp-image-3126" style="width:635px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_1_topo_logiciel_vmware-1024x652.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_1_topo_logiciel_vmware-300x191.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_1_topo_logiciel_vmware-768x489.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_1_topo_logiciel_vmware.jpg 1204w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Naturellement, le couple d&rsquo;authentification ne doit pas apparaitre en clair. Si je permets la saisie manuelle des credentials, dans le cadre de l&rsquo;automatisation de la tâche le mot de passe doit être chiffré.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="729" height="242" src="https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_2_topo_logiciel_vmware.jpg" alt="" class="wp-image-3127" style="width:554px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_2_topo_logiciel_vmware.jpg 729w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_2_topo_logiciel_vmware-300x100.jpg 300w" sizes="auto, (max-width: 729px) 100vw, 729px" /></figure>
</div>


<p>Comme d&rsquo;hab (j&rsquo;ai envie de dire), je préfère utiliser les fonctionnalités natives du système pour chiffrer le mot de passe avec les WAPI<sup data-fn="faa0140a-7764-49ef-a609-c2d0ae1607aa" class="fn"><a href="#faa0140a-7764-49ef-a609-c2d0ae1607aa" id="faa0140a-7764-49ef-a609-c2d0ae1607aa-link">17</a></sup> dans un fichier XML. Encore et toujours ce bon vieux CLIXML. Ainsi, l&rsquo;accès à l&rsquo;appliance est sécurisé et l&rsquo;impact est maitrisé.</p>



<figure class="wp-block-table"><table class="has-background has-fixed-layout" style="background-color:#eaff01"><tbody><tr><td><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color"><strong>Attention</strong></mark> néanmoins au ACL sur le répertoire dans lequel va être stocké le fichier de credential. Ce dernier doit avoir des permissions <strong>stricts</strong> (même si cela me semble évident).</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Taches Planifiées</h4>



<p>Là, toujours le même dilemme. Le serveur ou poste qui va exécuter le script est il au domaine ou non ?</p>



<p>Dans le cadre d’un environnement hors domaine, il conviendra de créer un compte utilisateur dédié avec les droits nécessaire pour assurer la sécurité. Néanmoins et lors de la création de la tâche, il conviendra de préciser le mot de passe ainsi que le compte local. Ce qui n’est pas ouf en termes de MCO. Mais c’est aujourd’hui l’une des méthodes que j’affectionne si le serveur est hors domaine.</p>



<p>A l’inverse, si l’environnement est lié à un domaine, l’approche est différente et j’ai pour le coup changer mon fusil d’épaule (va t’il passer l’arme à gauche ?). Je suis devenu un convaincu des groupes de compte de services administrés (gMSA) dans une certaine mesure. Après réflexion sur mon infrastructure ainsi que les 43 types de scripts développés, je me suis dit qu’il n’était pas déconnant de définir un serveur de script dédiée à des tâches planifiées.</p>



<p>De ce fait, je n’installe pas sur tous les serveurs les RSATs<sup data-fn="3ee453f5-e6fb-4db5-8061-3d8d6df04663" class="fn"><a href="#3ee453f5-e6fb-4db5-8061-3d8d6df04663" id="3ee453f5-e6fb-4db5-8061-3d8d6df04663-link">18</a></sup> ActiveDirectory et la rotation de mes mots de passe est périodique sans avoir à repasser, modifier les taches à chaque fois. C’est cool non ?</p>



<p>Il subsiste toutefois une petite pirouette si nous venions à utiliser les fonctions de chiffrement windows pour encoder et décoder une information. La création de la tâche nécessitera une configuration manuelle pour assurer le chiffrement.</p>



<h3 class="wp-block-heading">Dépendances</h3>



<p>Oui, je m&rsquo;appuie sur des dépendances tierces. Il me semble important de parler de ces derniers avant toutes choses. Premièrement pour rendre à Caesar ce qui appartient à Caesar et deuxièmement pour comprendre comment le projet est construit.</p>



<ul class="wp-block-list">
<li><span style="text-decoration: underline;"><strong>Connecteur .Net VMware &#8211; VMWare PowerCLI :</strong></span> Pour communiquer directement avec l&rsquo;appliance VMware, il suffit d&rsquo;installer et d&rsquo;utiliser le plugin VMware.PowerCLI depuis le repo de base powershell (PSGallery). Ainsi, nous disposons de l&rsquo;interface de commande compatible pour interagir avec les produits vSphere, vSAN, NSX, VMware Cloud on AWS etc. </li>



<li><strong><span style="text-decoration: underline;">Interface .Net Powershell – SQLite :</span></strong>&nbsp;Pour communiquer avec une base de données SQLite, j’ai installé le plugin powershell&nbsp;<strong>PSSQLite</strong>&nbsp;depuis le repo officiel.</li>



<li><strong><span style="text-decoration: underline;">Connecteur MS PowerBI et SQLite :</span></strong> Il me manquait les drivers ODBC<sup data-fn="d181a298-adb1-437a-be0f-e75ea138bb35" class="fn"><a href="#d181a298-adb1-437a-be0f-e75ea138bb35" id="d181a298-adb1-437a-be0f-e75ea138bb35-link">19</a></sup>, j’ai donc dû télécharger et installer ces derniers afin d’assurer la connexion entre l’application PowerBI et la BDD SQLite (<a href="http://www.ch-werner.de/sqliteodbc/">lien</a>).</li>
</ul>



<p>Et c’est tout. Rien de plus, rien de moins.</p>



<p>Avec toute la théorie, je pense que nous pouvons maintenant aborder la seconde partie pratique qui n’est rien d’autre que le guide d’installation et de configuration de l’application développée.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi/">PROJET &#8211; Dream Nebula</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-2-pratique/">Partie 2 : Pratique<br>—></a></td></tr></tbody></table></figure>



<p></p>


<ol class="wp-block-footnotes"><li id="7caccef3-d6ea-44ac-bcee-b6eb363a4cd4"><strong>SI</strong> : Système d&rsquo;Information <a href="#7caccef3-d6ea-44ac-bcee-b6eb363a4cd4-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="f5f385b9-0521-48d0-90f7-47fa952abf1e"><strong>DSI</strong> : Directeur des Systèmes d&rsquo;Informations <a href="#f5f385b9-0521-48d0-90f7-47fa952abf1e-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="4c979ee1-94ba-4da9-8f0b-eb8513606344"><strong>RSI</strong> : Responsable des Systèmes d&rsquo;Informations <a href="#4c979ee1-94ba-4da9-8f0b-eb8513606344-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="7033a964-de8a-427d-b0e4-5dbca04c3d71"><strong>MSP</strong> : Managed Services Provider <a href="#7033a964-de8a-427d-b0e4-5dbca04c3d71-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="780843c6-2ef0-45df-8125-19503166d39c"><strong>API</strong> : Application Programing Interface <a href="#780843c6-2ef0-45df-8125-19503166d39c-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="e7aae3df-f718-4618-83e3-9b14d433a6ee"><strong>IaaS</strong> : Interface as a Service <a href="#e7aae3df-f718-4618-83e3-9b14d433a6ee-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="8cdf59ce-9608-4bf6-a41e-a301fbdbfd8b"><strong>SaaS</strong> : Software as a Service <a href="#8cdf59ce-9608-4bf6-a41e-a301fbdbfd8b-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="d72df66d-e2e2-4a72-a31d-9c5af091a4cb"><strong>VCSA</strong> : VMware System Appliance <a href="#d72df66d-e2e2-4a72-a31d-9c5af091a4cb-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="9c2f2bb2-e9c7-46eb-9f91-0419e30a53b9"><strong>GUI</strong> : Graphic User Interface  <a href="#9c2f2bb2-e9c7-46eb-9f91-0419e30a53b9-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="43da8cff-22fe-4897-a22f-2f19b0daa69f"><strong>BDD</strong> : Base de données <a href="#43da8cff-22fe-4897-a22f-2f19b0daa69f-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="877a5f5e-81d0-40d2-b6c1-518e10f35b59"><strong>gMSA</strong> : Groupe Managed Service Account <a href="#877a5f5e-81d0-40d2-b6c1-518e10f35b59-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="47c14572-16cd-4a96-a53c-11d8d51d7015"><strong>SE</strong> : Système d&rsquo;Exploitation <a href="#47c14572-16cd-4a96-a53c-11d8d51d7015-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="60113356-51cf-40c6-ba4d-76f5d785982a"><strong>PBI</strong> : Microsoft Power BI <a href="#60113356-51cf-40c6-ba4d-76f5d785982a-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="3c50d356-83ec-421e-aab0-2abcf8969aff"><strong>RGPD</strong> : Règlement Général sur la Protection des Données <a href="#3c50d356-83ec-421e-aab0-2abcf8969aff-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="23c46418-bc3e-4a85-a9f1-52465592290f"><strong>MCD</strong> : Modèle Conceptuel de Données <a href="#23c46418-bc3e-4a85-a9f1-52465592290f-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="7ae3a458-32c1-46f0-94df-1d88c1ba70e4"><strong>SysDBAs</strong> : Administrateur des systèmes de base de données <a href="#7ae3a458-32c1-46f0-94df-1d88c1ba70e4-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="faa0140a-7764-49ef-a609-c2d0ae1607aa"><strong>WAPI</strong> : Windows Application Programing Interface  <a href="#faa0140a-7764-49ef-a609-c2d0ae1607aa-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="3ee453f5-e6fb-4db5-8061-3d8d6df04663"><strong>RSATs</strong> : Remote System Administration Tools <a href="#3ee453f5-e6fb-4db5-8061-3d8d6df04663-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li><li id="d181a298-adb1-437a-be0f-e75ea138bb35"><strong>ODBC</strong> : Open Database Connectivity <a href="#d181a298-adb1-437a-be0f-e75ea138bb35-link" aria-label="Aller à la note de bas de page 19">↩︎</a></li></ol>


<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Dream Nebula, VMWare KPI</title>
		<link>https://erwanguillemard.com/projet-dream-nebula-vmware-kpi/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sun, 07 Sep 2025 18:51:25 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[VEEAMONE]]></category>
		<category><![CDATA[VMWare]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3089</guid>

					<description><![CDATA[Toc Toc Toc ? Il y a quelqu&#8217;un ? C&#8217;est moi Borgniol&#8230; Après 3 mois d&#8217;absence et de retrait vis à vis du dernier article, j&#8217;ai pris la décision de faire une pause. Des contextes complexes m&#8217;ont menés à devenir un homme fatigué, à deux doigts du break. Mais ne nous attardons pas sur ce...]]></description>
										<content:encoded><![CDATA[
<p class="has-text-align-center">Toc Toc Toc ? Il y a quelqu&rsquo;un ? C&rsquo;est moi Borgniol&#8230;</p>



<p>Après 3 mois d&rsquo;absence et de retrait vis à vis du dernier article, j&rsquo;ai pris la décision de faire une pause. Des contextes complexes m&rsquo;ont menés à devenir <a href="https://www.youtube.com/watch?v=TbHgzj5-YdA&amp;ab_channel=STUDIOCANALFrance">un homme fatigué, à deux doigts du break</a>. Mais ne nous attardons pas sur ce point si petit soit il mais sans le négliger non plus.</p>



<p>Bref, en parallèle du projet précédent Green Ray, dans ma fièvre créative j&rsquo;ai conçu sur la même période une autre application. J&rsquo;ai toujours à l&rsquo;esprit cette même pudeur de présenter mes travaux, vis à vis des solutions déjà présente sur le marché ou des regards critiques de mes pairs.</p>



<p>J&rsquo;ai rêvé depuis des nombreuses années d&rsquo;une solution qui permettrai de suivre dans le temps l&rsquo;évolution d&rsquo;un SI en terme de ressource dans un environnement virtualisé VMWare. Je sais encore une fois que ce rêve n&rsquo;est que la prolongation de la vision de mon prédécesseur. Ce dernier avait pensé et développé un tableau de bord dans un tableur pour définir le seuil de consommation d&rsquo;un environnement clustérisé VMWare et de définir la charge critique des ressources dans un fonctionnement normal et dégradé. Il avait également poussé le curseur jusqu&rsquo;à dissocier les grandes familles des ressources virtuelles.</p>



<p>La vie d&rsquo;une entreprise vous connaissez ? <a href="https://www.youtube.com/watch?v=nLU5pgSxqNU&amp;list=RDnLU5pgSxqNU&amp;start_radio=1&amp;ab_channel=RTSArchives">Ca s&rsquo;en va et ca revient</a> (ou pas&#8230;). Vous comprenez qu&rsquo;il a quitté l&rsquo;entreprise, emportant avec lui la solution qu&rsquo;il avait développé sur son temps personnel.</p>



<p>Je me suis donc inspiré de ces réflexions et ai poussé plus loin le curseur jusqu&rsquo;aux serveurs virtuelles, datastores etc. De ce contexte est né <strong>SS_043</strong> ou <strong>Dream Nebula</strong>, concrétisant l&rsquo;accomplissement d&rsquo;un projet de 3 ans. Mon application vient répondre à la problématique.</p>



<p class="has-text-align-center"><strong><em>Comment garantir le capacity planning d&rsquo;un système d&rsquo;information virtualisé sous VMWare dans son fonctionnement normal et dégradé dans le temps tout en garantissant une vision la plus précise de chaque type d&rsquo;environnement ainsi qu&rsquo;une synthèse des bulles métiers ou clients à des fins de facilitation de refacturation interne ou externe des ressources consommées.</em></strong></p>



<p>Encore une bien vaste problématique qui pourrait faire le sujet d&rsquo;une fin de cycle de cinquième année. 🙂</p>



<p>Les premières versions pour répondre aux attentes se basait sur les RVTools et les données qui en étaient retournées. Ainsi il m&rsquo;était donc facile de marcher dans les pas de mon prédécesseurs et d&rsquo;integrer et manipuler les données dans un tableau xlsxm.</p>



<p class="has-text-align-center"><strong>XLSXM tien donc ?</strong></p>



<p>Oui. Je rappel que je souhaite avoir une traçabilité dans le temps. Donc pas besoin de sortir de Saint-Cyr pour savoir que cela va se traiter par le biais de MACRO en VB. (Normalement avec juste les termes tableurs, MACRO et VB nous SACHONS que cela ne fonctionnera pas dans le temps en terme de maintient de la solution). Et bien spoiler, la première solution aura tenue un an et demi. A la fin cela ne ressemblait plus à grand chose et beaucoup d&rsquo;options automatisées étaient faites manuellement.</p>



<p class="has-text-align-center"><strong>Pourquoi ?</strong></p>



<p>Il y a bien des raisons et je vais les expliquer :</p>



<ul class="wp-block-list">
<li>La mise à jour des composants VMWares (vSphere et vCenter) ajoute ou modifie l&rsquo;ordre des colonnes. Donc il est nécessaire de réadapter l&rsquo;ensemble des formules dans le tableur</li>



<li>Les mises à jour du framework .NET et Windows rendent obsolètes certaines fonctionnalités au sein d&rsquo;excel. Retour case développement dans les MACRO</li>



<li>Certaines lignes sautent et donc cela décalent toutes les autres lignes</li>
</ul>



<p>C&rsquo;est à partir des points précédents que Dream Nebula ou SS_043 est né 🙂</p>



<p>Mon projet se base sur une technologie, VMWare et son usage des tags. Toutefois et à des fins d&rsquo;efficience, je me base sur VEEAMOne pour l&rsquo;attribution des tags VMWares. Je vous laisse si nécessaire vous référer à l&rsquo;article déjà présent sur le sujet. J&rsquo;insiste, l&rsquo;usage de VEEAMOne est optionnel.</p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p>Attention, bis repetita en approche&#8230;</p>



<p>Il est important de comprendre que ce billet ne rentrera pas dans le détail technique et ce pour des raisons évidentes de savoir faire et de protection intellectuelle. Le code source est disponible sur GitHub mais ne sera pas en libre accès.&nbsp;<strong>Ah ouai et pourquoi donc ?</strong></p>



<p>Comme j’ai pu le mentionner dans un&nbsp;<a href="https://erwanguillemard.com/projet-passerelle-veeamone-itop/">article précédent</a>&nbsp;je suis satisfait de ce que j’ai réussi à livrer et à créer. J’ai passé un bon nombre d’heure de recherche et de développement à concevoir la solution ainsi que la lecture des différentes documentations. Contrairement à d’autres projets je suis satisfait de la qualité du code produit et de l’architecture de ce dernier.</p>



<p>Ce qui m’amène au point, dois je commercialiser ce dernier ou le laisser à la disposition de tous ? Mon cœur peine à se décider… Je souhaite valoriser mon travail de recherche…</p>



<p>Bref, si votre curiosité est toujours suscitée je pense que le reste de l’article devrait être satisfaite. Dans le cas contraire, je vous laisse exécuter la combinaison&nbsp;<strong>Ctrl+F4</strong>.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>&nbsp;Windows Server 2k19 et version ultérieures ou Windows 11</li>



<li><strong>Apps :&nbsp;</strong>VCSA version 7 ou plus</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>PowerShell version 5 et superieur</li>



<li>PowerBI (optionnel)</li>



<li>ODBC drivers (SQLite3)</li>



<li>VEEAMOne version 12 ou plus (optionnel) </li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Guide</h2>



<ul class="wp-block-list">
<li><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-1-theorie/">Partie 1 : Théorie</a>
<ul class="wp-block-list">
<li>Définir l’expression du besoin et aborder le cahier des charges attendu. Ce qui implique l’architecture de l’application, du code. Les solutions retenues ainsi que les notions de sécurité</li>
</ul>
</li>



<li><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-2-pratique/">Partie 2 : Pratique</a>
<ul class="wp-block-list">
<li>Guide de déploiement de la solution et paramétrage de cette dernière.</li>



<li><mark><em><s>Oups, un mot de passe ? On échange avant ?</s></em>&nbsp;</mark><strong>#bisous</strong></li>
</ul>
</li>



<li><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-3-demonstration/">Partie 3 : Démonstration</a>
<ul class="wp-block-list">
<li>Faire une présentation de la solution dans les différents modes qui ont été développés.</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Le mot de la fin</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Moi j&rsquo;ai la lèvre humide et je sais la science, de perdre au fond d&rsquo;un terminal ISE l&rsquo;antique conscience. Je sèche tous les pleurs sur mes KPIs triomphants, et fais rire les DSIs du rire du DEVOps</p>
<cite>Erwan GUILLEMARD refondu de <em><a href="https://www.youtube.com/watch?v=3LY2y-x92CA&amp;ab_channel=L%C3%A9oFerr%C3%A9">Charles BAUDELAIRE</a></em></cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://techdocs.broadcom.com/us/en/vmware-cis/vcf/power-cli/latest/powercli.html">VMWare &#8211; PowerCLI</a></li>
</ul>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET – Green Ray, VEEAM Reporting Partie 2 : Pratique</title>
		<link>https://erwanguillemard.com/projet-green-ray-veeam-reporting-partie-2-pratique/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sun, 13 Apr 2025 18:36:24 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[VEEAM]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3003</guid>

					<description><![CDATA[C’est la première fois que je vais rédiger un bout d’article de la sorte. L’objectif étant de décrire l’installation et déploiement de la solution. A quoi bon me direz vous si je ne donne pas accès à l’outil&#160;? Ce à quoi je répondrai et si je décide de donner accès à ce dernier&#160;? Il y...]]></description>
										<content:encoded><![CDATA[


<p>C’est la première fois que je vais rédiger un bout d’article de la sorte. L’objectif étant de décrire l’installation et déploiement de la solution. </p>



<p class="has-text-align-center"><strong>A quoi bon me direz vous si je ne donne pas accès à l’outil&nbsp;? Ce à quoi je répondrai et si je décide de donner accès à ce dernier&nbsp;? Il y a un petit effet UNO/CONTRE UNO &lt;3</strong></p>



<p>Au-delà de l’aspect, il s’agit surtout d’établir un mode opératoire différent du bon vieux README.txt, ou du moins faire en sorte d’avoir un MO<sup data-fn="ee7c9a30-d560-48eb-b268-416c7256ebf8" class="fn"><a href="#ee7c9a30-d560-48eb-b268-416c7256ebf8" id="ee7c9a30-d560-48eb-b268-416c7256ebf8-link">1</a></sup> qui a de la gueule.</p>



<h3 class="wp-block-heading">Prérequis</h3>



<p>Dernier point avant de taper dans le fond du sujet, le déploiement ne se fait que dans un environnement WINDOWS (Workstation ou Server) ayant au minimum la version Powershell 5 d’installer et qui prend en charge les communication TLS<sup data-fn="b4eac81d-3adb-45e1-9aa0-2bab1f481a5f" class="fn"><a href="#b4eac81d-3adb-45e1-9aa0-2bab1f481a5f" id="b4eac81d-3adb-45e1-9aa0-2bab1f481a5f-link">2</a></sup> en version 1.2 minimum.</p>



<p>Bien que pas j’ai automatisé un bon nombre d’installation de dépendances certaines restent tout de même à déployer manuellement. Toutefois, les outils à déployer manuellement concernent la partie exploitation de la donnée qui peuvent et doivent être dissocier de la partie serveur. </p>



<p>Naturellement et bien que cela coule de source, LES PRIVILEGES ADMINISTRATEURS sont nécessaire au premier usage pour l’installation des dépendances (logique non&nbsp;?).</p>



<h4 class="wp-block-heading">Back End</h4>



<p>Les prérequis sont les suivants&nbsp;:</p>



<ul class="wp-block-list">
<li>Module powershell PSSQLite&nbsp;: Ce dernier est déployé automatiquement par l’application. Toutefois, il est possible d’installer cette dernière manuellement.</li>
</ul>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3003_3ea3f9-35 kt-accordion-has-2-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3003_c159bb-b0"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Vérifier la présence du module</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>La commande des plus classique, Get-InstalledModule pour lister les modules présents sur le système.</p>



<p></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7a8196c401869986a20a4589f00c3027"><code>&gt; Get-InstalledModule -Name PSSQLite</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="509" height="56" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_007_2_config.jpg" alt="" class="wp-image-3026" style="width:582px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_007_2_config.jpg 509w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_007_2_config-300x33.jpg 300w" sizes="auto, (max-width: 509px) 100vw, 509px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3003_d613fc-43"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Installer le module</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Toujours vérifier en amont la disponibilité du module dans la liste des repos et lancer l&rsquo;installation. Il est possible de filtrer et d&rsquo;installer une version spécifique.</p>



<p></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-4f0afa9e800c61603507eb8c901749b2"><code>&gt; Find-Module -Name PSSQLite
&gt; Install-Module -Name PSSQLite</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="509" height="58" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_007_3_config.jpg" alt="" class="wp-image-3025" style="width:649px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_007_3_config.jpg 509w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_007_3_config-300x34.jpg 300w" sizes="auto, (max-width: 509px) 100vw, 509px" /></figure>
</div></div></div></div>
</div></div></div>



<h4 class="wp-block-heading">Front End</h4>



<p>Sur le serveur ou poste qui servira à exploiter les données il sera nécessaire d’installer les dépendances suivantes&nbsp;:</p>



<ul class="wp-block-list">
<li>Drivers ODBC<sup data-fn="b78d2143-c4ef-4fe7-9820-01c547073755" class="fn"><a href="#b78d2143-c4ef-4fe7-9820-01c547073755" id="b78d2143-c4ef-4fe7-9820-01c547073755-link">3</a></sup> for SQLite3</li>



<li>Microsoft PowerBI (si powerBI utilisé)</li>



<li>DB<sup data-fn="f76b3d5c-ce24-4782-943c-44601ce44c15" class="fn"><a href="#f76b3d5c-ce24-4782-943c-44601ce44c15" id="f76b3d5c-ce24-4782-943c-44601ce44c15-link">4</a></sup> Browser for SQLite (en option mais pratique pour débugger ou altérer des données dans les tables)</li>
</ul>



<p>L&rsquo;installation des divers composants ne représente aucun point bloquant. J&rsquo;ajoute en fin de ce billet les sources pour télécharger les différents composants. Pour vraiment prendre la main de chacun le processus d&rsquo;installation est disponible ci-dessous.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3003_63f609-83 kt-accordion-has-3-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3003_990162-57"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Driver ODBC</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>L&rsquo;un des points problématiques à mon sens se porte sur l&rsquo;origine du site qui n&rsquo;est pas en HTTPS. Mon expérience de jadis sur la technologie SQLite fait que j&rsquo;ai dû utiliser ce site. Je n&rsquo;ai jamais eu de problème.</p>



<p>Oui, j&rsquo;ai du chercher dans les mémoires que j&rsquo;avais rédigé à l&rsquo;époque&#8230;</p>



<p></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="351" class="wp-image-3063" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install.jpg 500w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install-300x234.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="350" class="wp-image-3064" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install.jpg 504w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install-300x233.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="352" class="wp-image-3065" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install.jpg 500w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install-300x235.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="351" class="wp-image-3066" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install.jpg 502w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install-300x234.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="350" class="wp-image-3067" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install.jpg 501w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install-300x234.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td><td class="has-text-align-center" data-align="center"></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3003_73ecdc-5c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>PowerBI</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Pas de difficulté en soi. Il est toutefois opportun de posséder un compte Microsoft&#8230;</p>



<p></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="359" class="wp-image-3069" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install.jpg 495w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install-300x239.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="357" class="wp-image-3070" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install.jpg 496w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install-300x238.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="357" class="wp-image-3071" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install.jpg 496w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install-300x238.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="354" class="wp-image-3072" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_5_pbi_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_5_pbi_install.jpg 497w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_5_pbi_install-300x236.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="359" class="wp-image-3073" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install.jpg 497w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install-300x239.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="358" class="wp-image-3074" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install.jpg 497w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install-300x238.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3003_a6c420-80"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>DB Browser for SQLite</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Toujours en mode enfonçage de porte&#8230;</p>



<p></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="354" class="wp-image-3075" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install.jpg 493w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install-300x236.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="354" class="wp-image-3076" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install.jpg 494w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install-300x236.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="353" class="wp-image-3077" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install.jpg 499w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install-300x235.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="354" class="wp-image-3078" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install.jpg 498w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install-300x236.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="351" class="wp-image-3079" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install.jpg 497w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install-300x234.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="450" height="350" class="wp-image-3080" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install.jpg 502w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install-300x234.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<h3 class="wp-block-heading">Configuration</h3>



<p>Avant de lancer le script, il est nécessaire de faire un tour vers le fichier de configuration contenu dans le répertoire config à la racine du projet. Je vais prendre le temps de décrire chacune des parties de ce fichier.</p>



<p class="has-text-align-center">Le fichier se découpe en 1 partie et 6 sous-parties.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-left" data-align="left">* Une sous-partie globale qui définit les paramètres du script et de son fonctionnement<br><br>* Une sous-partie dédiée à la VSPC<sup data-fn="6ac8a1eb-1f38-45e9-9889-bce49a21cacb" class="fn"><a href="#6ac8a1eb-1f38-45e9-9889-bce49a21cacb" id="6ac8a1eb-1f38-45e9-9889-bce49a21cacb-link">5</a></sup> permettant d’établir la connexion à l’API<sup data-fn="df8e991f-771d-4e79-a601-683d47b863fc" class="fn"><a href="#df8e991f-771d-4e79-a601-683d47b863fc" id="df8e991f-771d-4e79-a601-683d47b863fc-link">6</a></sup>.<br><br>* Une sous-partie dédiée à l’export des données au format CSV, reliquat de la version 1 LEGACY<br><br>* Une sous-partie concernant l’envoie de notification SMTP<sup data-fn="d0b927df-a474-4a9f-92af-8479cbd88b6e" class="fn"><a href="#d0b927df-a474-4a9f-92af-8479cbd88b6e" id="d0b927df-a474-4a9f-92af-8479cbd88b6e-link">7</a></sup>, futur feature/bug (rayer la mention inutile) à venir<br><br>* Une sous-partie dédiée à la base de données SQLite. Faut bien stocker les données quelques parts<br><br>* Une sous-partie concernant le paramétrage du mode service en tant que tâche planifiée</td><td><img loading="lazy" decoding="async" width="750" height="635" class="wp-image-3024" style="width: 750px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_007_1_config.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_007_1_config.jpg 605w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_007_1_config-300x254.jpg 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /></td></tr></tbody></table></figure>



<p></p>



<p>Après cette longue énumération rébarbative, je pense que nous pouvons regarder en détail chacune des parties et sous-parties.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3003_2b1e55-03 kt-accordion-has-6-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3003_755bd1-66"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Général</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p><strong>DEBUG&nbsp;:</strong> Prend la valeur boolean $true ou $false. Ce paramètre permet d’activer dans la console le mode debug.</p>



<p><strong>TRANSACTION_SCRIPT&nbsp;:</strong> Prend la valeur boolean $true ou $false. Ce paramètre active ou non la redirection des flux de la console dans un fichier de log. Le fichier est écrasé à chaque exécution du code.</p>



<p><strong>TRANSACTION_SCRIPT_FILE&nbsp;:</strong> Prend la valeur une chaine de caractère de type String. Indique le nom du fichier dans lequel toutes les sorties vont être redirigées. Attention ce dernier n’est pris en compte que si et seulement si le paramètre TRANSACTION_SCRIPT est définie à $true.</p>



<p><strong>AUTHOR&nbsp;:</strong> Prend la valeur une chaine de caractère de type String. Prend la valeur une chaine de caractère de type String. Le nom du créateur des scripts afin d’afficher l’information dans les différents rendus.</p>



<p><strong>VERSION&nbsp;:</strong> Prend la valeur une chaine de caractère de type String. Suivre l’évolution de versionning de l’outil et des scripts.</p>



<p><strong>DATE&nbsp;:</strong> Prend la valeur une chaine de caractère de type String. La date de la dernière modification et version disponible.</p>



<p><strong>MODULES&nbsp;:</strong> Prend en paramètre un tableau de chaine de caractère de type String. L’ensemble des modules définit dans ce tableau seront chargés au démarrage de l’application. Les modules doivent être présent dans le répertoire module au format .psm1</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3003_751c6b-46"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; VSPC</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p><strong>API_URL&nbsp;:</strong> Prend en paramètre une chaine de caractère de type String. L’URL<sup data-fn="c28f00e8-df46-48d6-8047-93395fbff264" class="fn"><a href="#c28f00e8-df46-48d6-8047-93395fbff264" id="c28f00e8-df46-48d6-8047-93395fbff264-link">8</a></sup> à ce jour pour compatible pour la version 8.0 et 8.1 est /api/v3. C’est à partir de cette valeur que l’ensemble des requêtes APIs seront construits.</p>



<p><strong>API_PORT :</strong> Prend en paramètre en entier de type Integer. Il s’agit du port sur lequel l’API est publiée. Par défaut la valeur est 1280</p>



<p><strong>API_SERVERNAME&nbsp;:</strong> Prend en paramètre une chaine de caractère de type String. La valeur mentionnée doit être le nom fqdn du serveur dans l’idéale. Plus précisément la valeur en adéquation avec le certificat.</p>



<p><strong>API_KEY&nbsp;:</strong> Prend en paramètre une chaine de caractère de type String. La valeur est la clé fournit par la VSPC. A des fins de sécurisation, cette valeur devrait être stockée dans un fichier à part et chiffrée. Pour l’instant ce paramètre restera dans le fichier par défaut.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3003_d1e037-8f"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; CSV</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p><strong>EXPORT_DAILY&nbsp;:</strong> Prend en paramètre une chaine de caractère de type String. Dans la première version de l’application en mode LEGACY, les données étaient exportées dans des fichiers CSV et écrit dans le répertoire DAILY tous les jours.</p>



<p><strong>EXPORT_WEEKLY&nbsp;:</strong> Prend en paramètre une chaine de caractère de type String. Dans la première version de l’application en mode LEGACY, les données journalières étaient traitées et exportées dans des fichiers CSV par un traitement hebdomadaire automatisé et écrit dans le répertoire WEEKLY chaque Lundi.</p>



<p><strong>EXPORT_MONTHLY&nbsp;:</strong> Prend en paramètre une chaine de caractère de type String. Dans la première version de l’application en mode LEGACY, les données hebdomadaires étaient traitées et exportées dans des fichiers CSV par un traitement mensuel automatisé et écrit dans le répertoire MONTHLY tous les premiers jours du mois après le traitement hebdomadaire. </p>



<p><strong>EXPORT_YEARLY&nbsp;:</strong> Prend en paramètre une chaine de caractère de type String. Dans la première version de l’application en mode LEGACY, les données hebdomadaires étaient traitées et exportées dans des fichiers CSV par un traitement annuel automatisé et écrit dans le répertoire YEARLY tous les premiers jours de la nouvelle année après le traitement mensuelle.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3003_bcc033-2b"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; SMTP</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p><strong>FROM :</strong> Prend la valeur une chaine de caractère de type String. Va contenir l&rsquo;adresse de l&rsquo;émetteur. Dans la logique, j&rsquo;aime à utiliser le nom du serveur ou du rôle, par exemple srv-task01@contoso.com. </p>



<p><strong>TO :</strong> Prend la valeur une chaine de caractère de type String. Va contenir l&rsquo;adresse du destinataire qui doit recevoir le mail. Dans la logique, préférer une LD<sup data-fn="918cc4b5-01e8-42e0-b80e-2d5738c4b391" class="fn"><a href="#918cc4b5-01e8-42e0-b80e-2d5738c4b391" id="918cc4b5-01e8-42e0-b80e-2d5738c4b391-link">9</a></sup> ou une BAL<sup data-fn="91cabf03-a1e9-4ef4-b59a-c2f5e1b60461" class="fn"><a href="#91cabf03-a1e9-4ef4-b59a-c2f5e1b60461" id="91cabf03-a1e9-4ef4-b59a-c2f5e1b60461-link">10</a></sup> partagée pour que l&rsquo;information et la responsabilité ne soit pas porter que par un individu.</p>



<p><strong>SERVERNAME :</strong> Prend la valeur une chaine de caractère de type String. Le nom du serveur qui fait relai SMTP, pour plus de sécurité, renseigner le FQDN<sup data-fn="f4e5048f-3e52-42ca-a735-fc19f6a459b7" class="fn"><a href="#f4e5048f-3e52-42ca-a735-fc19f6a459b7" id="f4e5048f-3e52-42ca-a735-fc19f6a459b7-link">11</a></sup> en lieu et place d&rsquo;une IP.</p>



<p><strong>PORT : </strong>Prend la valeur une chaine de caractère de type String. Préciser le port d&rsquo;écoute du serveur SMTP. 25, 587, 465. Libre à chacun. </p>



<p><strong>ENCODING : </strong>Prend la valeur une chaine de caractère de type String. Rien de pire que de ne pas afficher et prendre en compte les caractères spécifiques. J&rsquo;aime donc à laisser la possibilité de s&rsquo;improviser CHAMPOLLION ou non.</p>



<p class="has-small-font-size"><em><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">*</mark><strong>Note au lecteur :</strong> J&rsquo;ai pour habitude de ne pas requêter en direct mon relai SMTP sortant et donc de passer par un relai intermédiaire. C&rsquo;est pourquoi il n&rsquo;y a pas de paramètre d&rsquo;authentification. Je note le point pour une feature éventuelle. Toutefois le couple d&rsquo;authentification sera dans un fichier à part et chiffré.</em></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3003_e2930f-a5"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>5 &#8211; SQLITE</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p><strong>DB_NAME :</strong> Prend la valeur une chaine de caractère de type String. Permet d&rsquo;indiquer le nom du fichier de la base de données. Quoi qu&rsquo;il arrive, l&rsquo;extension doit être .sqlite ou .sqlite3. Personnellement, j&rsquo;ai deux fichiers de configuration ou plutôt deux instances. L&rsquo;une en SS034_EGU_test.sqlite et SS034_EGU.sqlite, comme ça facile de jouer et de debug sans impacter l&rsquo;instance de production.</p>



<p><strong>DB_PATH :</strong> Prend la valeur une chaine de caractère de type String. L&#8217;emplacement de la BDD. Par défaut, l&#8217;emplacement se trouve dans le répertoire du répertoire parent sous /database.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3003_47243d-44"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>6 &#8211; SCHEDULED_TASK</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Cette sous partie est assez délicate à traiter car il dépend de deux cas de figure. Le poste est il joint au domaine ou non.</p>



<p>Selon la réponse apporter, le cheminement n&rsquo;est pas le même.</p>



<p>Dans le cas d&rsquo;un poste lié au domaine, je recommande maintenant d&rsquo;user des comptes de services pour une sécurité renforcée (mais qu&rsquo;est ce qu&rsquo;il parle bien dit donc&#8230;). Il vous sera donc nécessaire de créer un gMSA<sup data-fn="0e56f8df-8f87-4746-8b6d-b69805292bb2" class="fn"><a href="#0e56f8df-8f87-4746-8b6d-b69805292bb2" id="0e56f8df-8f87-4746-8b6d-b69805292bb2-link">12</a></sup> et tout le toutim. Je pourrai faire un billet sur cette fonctionnalité, mais le web relève déjà de plusieurs articles de la sorte. Je passe mon tour cette fois ci.</p>



<p>Dans le cas où la création de gMSA n&rsquo;est pas possible (une histoire de niveau fonctionnel encore&#8230; Mais que font ces SysAdmins ! ) ou que le serveur est hors domaine, il sera nécessaire de créer un compte utilisateur restreints. Dans ce cas précis, il est préférable de définir le compte manuellement et de désactiver la création automatisée.</p>



<p><strong>TASK_ENABLE : </strong>Prend la valeur boolean $true ou $false. Ce paramètre permet d’activer la création automatisée ou non de la tâche planifiée.</p>



<p><strong>TASK_PATH_FOLDERNAME : </strong>Prend la valeur une chaine de caractère de type String. Ce paramètre permet de donner un peu plus de lisibilité dans l&rsquo;arborescence du planificateur des tâches. Ainsi l&rsquo;ensemble de mes tâches sont sous \_ronelab\. Ce qui rend bien plus facile la gestion et maintenance de ces dernières. </p>



<p><strong>TASK_NAME :</strong> Prend la valeur une chaine de caractère de type String. Va contenir le nom de la tâche. Rien de bien sorcier.</p>



<p><strong>TASK_TRIGGER_HOUR :</strong> Prend la valeur une chaine de caractère de type String. Définir l&rsquo;heure d&rsquo;exécution de la tâche. Pour ce qui est du jour, ici le paramétrage est en dur dans le code. Pourquoi ? Car je souhaite une exécution quotidienne.</p>



<p><strong>TASK_DOMAIN : </strong>Prend la valeur une chaine de caractère de type String. Indiquer le nom de domaine auquel le server est joint. Dans le cadre d&rsquo;un compte hors domaine, le nom du serveur est nécessaire.</p>



<p><strong>TASK_USER :</strong> Prend la valeur une chaine de caractère de type String. Dans le cadre d&rsquo;un serveur joint à un domaine il faudra préciser le nom du compte de service suivi du caractère <strong>$</strong>. Il est possible de communiquer un compte utilisateur. Attention toutefois dans le dernier cas à renseigner le mot de passe manuellement, ce dernier n&rsquo;étant pas pris en compte pour l&rsquo;instant.</p>
</div></div></div>
</div></div></div>



<p></p>



<p>J&rsquo;ai ajouté dans la solution la possibilité d&rsquo;éditer le fichier directement depuis l&rsquo;interface console. Par sécurité, j&rsquo;ai ajouté une fonctionnalité de régénération automatique du fichier en cas de suppression ou de corruption. Hé oui, j&rsquo;en ai eu marre de me repalucher le fichier de configuration plusieurs fois à la mano&#8230;</p>



<p>Avec la compréhension du fichier de configuration, je pense que nous pouvons passer à la suite, soit déployer l&rsquo;application sur le serveur.</p>



<h3 class="wp-block-heading">Installation</h3>



<p>Dans l&rsquo;idéal, j&rsquo;aime à dédier un disque de 5Go pour l&rsquo;application. </p>



<p class="has-text-align-center">Pourquoi ? Encore cette traditionnelle question que nous enfant de 3 ans avons posés sans cesse à nos ainés et que nous subirons à notre tour plus tard que nous soyons ou non parent&#8230; J&rsquo;en veux pour preuve séance tenante 🙂</p>



<p>Pour la bonne et simple raison que cela permet de dissocier de la partie système de l&rsquo;application et également de se prémunir d&rsquo;un dépassement de stockage comme nous avons une base de données.</p>



<p>Il suffit de déposer le répertoire à la racine du lecteur D:\ ou d&rsquo;ailleurs puis de définir les paramètres du fichier de configuration. Et puis c&rsquo;est tout. 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="609" height="211" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_1_Install.jpg" alt="" class="wp-image-3029" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_1_Install.jpg 609w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_1_Install-300x104.jpg 300w" sizes="auto, (max-width: 609px) 100vw, 609px" /></figure>
</div>


<p>Lancer le script SS_34_2.0.0_VEEAM-Backup-Reporting_Main.ps1 pour réaliser les opérations d&rsquo;initialisation et vérification des dépendances. On me chuchote dans l&rsquo;oreillette qu&rsquo;il faut faire un clic droit Exécuter avec Powershell (en tant Administrateur).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="744" height="156" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_2_Install.jpg" alt="" class="wp-image-3031" style="width:563px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_2_Install.jpg 744w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_2_Install-300x63.jpg 300w" sizes="auto, (max-width: 744px) 100vw, 744px" /></figure>
</div>


<p>Si le mode DEBUG est activé et que la redirection des sorties dans un fichier de log également, nous devons avoir en amont les entrées ci-dessous (oui il y a des améliorations Hé Nanani Hé Nanana&#8230;).</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="324" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_3_Install-1024x324.jpg" alt="" class="wp-image-3030" style="width:755px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_3_Install-1024x324.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_3_Install-300x95.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_3_Install-768x243.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_3_Install.jpg 1184w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Ce qui est cool avec la partie rédaction c&rsquo;est qu&rsquo;à ce moment je me rends compte que je n&rsquo;ai pas réalisé la mise à jour de l&rsquo;interface CLI<sup data-fn="6a54e67f-ce8b-4a79-9b9f-2cba488bfaed" class="fn"><a href="#6a54e67f-ce8b-4a79-9b9f-2cba488bfaed" id="6a54e67f-ce8b-4a79-9b9f-2cba488bfaed-link">13</a></sup>&#8230; L&rsquo;option pour lancer l&rsquo;application se fait en appuyant sur la touche 7. Oui promis, je corrige l&rsquo;interface prochainement 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="956" height="89" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_4_Install.jpg" alt="" class="wp-image-3032" style="width:709px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_4_Install.jpg 956w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_4_Install-300x28.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_4_Install-768x71.jpg 768w" sizes="auto, (max-width: 956px) 100vw, 956px" /></figure>
</div>


<p>Là je suis honnête, il y a quelque chose que je ne comprends pas bien et je pense que cela est dû à un problème de contexte. Je m&rsquo;explique.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>En exécutant le code directement dans une console, ce dernier retourne le résultat attendu sur le plan applicatif mais je n&rsquo;ai pas de trace de débogage. <br><br>A l&rsquo;inverse, si j&rsquo;exécute le même code dans la console ISE<sup data-fn="76c6ad3d-e064-431b-870c-3f2a7299436f" class="fn"><a href="#76c6ad3d-e064-431b-870c-3f2a7299436f" id="76c6ad3d-e064-431b-870c-3f2a7299436f-link">14</a></sup> (après avoir saisie l&rsquo;option 7 du menu contextuel, j&rsquo;obtiens les sorties ci-contre.<br><br>Rien de méchant en soit mais bon c&rsquo;est moche&#8230;</td><td><img decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_5_Install.jpg" alt=""></td></tr></tbody></table></figure>



<p></p>



<p>Nous avons donc lancer notre script pour la première fois, nous pouvons clôturer l&rsquo;application en appuyant sur la touche 0.</p>



<p>Normalement et si l&rsquo;ensemble des prérequis ont été réalisés, nous avons :</p>



<ul class="wp-block-list">
<li>Installé le module PSSQLite</li>



<li>Déployé la tache planifiée avec le mode service</li>



<li>Réalisé la première extraction de notre environnement VSPC et générer notre BDD</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="612" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_6_Install-1024x612.jpg" alt="" class="wp-image-3034" style="width:574px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_6_Install-1024x612.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_6_Install-300x179.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_6_Install-768x459.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_6_Install-1536x919.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_008_6_Install.jpg 1555w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Il est possible que des erreurs remontent. Cela peut être dû à plusieurs possibilités qui nécessite un diagnostic. Toutefois, il est possible de corriger certains points. A l&rsquo;avenir une Partie 4 KB serait intéressant à développer.</p>



<p>Bref, si la tâche planifiée <a href="https://www.youtube.com/watch?v=W9WaosaHJdY&amp;ab_channel=JamesBruno">branle de la cafetière</a> vous pouvez modifier cette dernière ou bien la supprimer. Dans tous les cas et si les paramètres sont corrects dans le fichier de configuration, lors de la prochaine exécution manuelle du script la tâche sera recréée.</p>



<p>Il est possible lors de la connexion à la VSPC en API que le script retourne une erreur. Cette erreur est dû au certificat autosigné. Ce point est abordé dans l&rsquo;article VSPC.</p>



<h3 class="wp-block-heading">Exploitation des données, Reporting</h3>



<p>Comme abordé dans la partie précédente, il est tout à fait possible de définir votre propre modèle de reporting en venant interroger la BDD SQLite.</p>



<ul class="wp-block-list">
<li>Excel</li>



<li>Homade Web Apps</li>



<li>PowerBI</li>



<li>etc</li>
</ul>



<p>Je vous jure que pour une fois, je me suis dit que j&rsquo;allais me mettre au WEB pour requêter ma BDD. Puis finalement, ayant opté pour une BDD SQLite, j&rsquo;ai vite constaté que mon seul petit être ne suffirait pas à tout gérer dans un temps raisonnable (plus de 400 heures sur le projet tout de même) c&rsquo;est pourquoi je me suis tourné vers l&rsquo;outil Microsoft PowerBI.</p>



<p>Je fournis un modèle déjà tout fait avec les liaisons inter-table (MLD<sup data-fn="dace3ace-7f13-4c66-afae-139b38ca5505" class="fn"><a href="#dace3ace-7f13-4c66-afae-139b38ca5505" id="dace3ace-7f13-4c66-afae-139b38ca5505-link">15</a></sup> si je ne dis pas de bêtise).</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="541" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_0_report-1024x541.jpg" alt="" class="wp-image-3050" style="width:596px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_0_report-1024x541.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_0_report-300x158.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_0_report-768x406.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_0_report.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ul class="wp-block-list">
<li>En <mark style="background-color:rgba(0, 0, 0, 0);color:#3facd6" class="has-inline-color"><strong>Bleu</strong></mark> la partie dédiée à la gestion des Licences des produits<strong><em> VEEAM</em></strong></li>



<li>En <mark style="background-color:rgba(0, 0, 0, 0);color:#77d740" class="has-inline-color"><strong>Vert</strong></mark> la partie dédiée à <em><strong>VEEAM Backup et Réplication</strong></em></li>



<li>En <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color"><strong>Orange</strong></mark> la partie dédiée à <strong><em>VEEAM Backup For Microsoft O365</em></strong></li>
</ul>



<p>D&rsquo;après l&rsquo;un de mes proches amis dans le monde l&rsquo;IT je suis un grand malade d&rsquo;avoir poussé jusque-là. M&rsquo;enfin, comme pour les cons, nous sommes tous le malade/con d&rsquo;un autre. 🙂</p>



<p>Ouvrer le fichier présent dans le répertoire Report.</p>



<p>Une fois ouvert, changer la source de données. Sinon vous allez avoir une erreur ODBC. Naturellement les drivers ODBC pour SQLite ont été installé préalablement sinon c&rsquo;est la mort assurée&#8230;</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3003_6741cc-f4 kt-accordion-has-3-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3003_cf613c-6f"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Paramétrage de la source</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Depuis l&rsquo;application PowerBI, <em>Fichier &gt; Options et paramètres &gt; Paramètres de la source de données</em>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="557" height="608" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_1_report.jpg" alt="" class="wp-image-3051" style="width:321px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_1_report.jpg 557w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_1_report-275x300.jpg 275w" sizes="auto, (max-width: 557px) 100vw, 557px" /></figure>
</div>


<p></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3003_48bf83-8e"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Changer la source existence</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>S&rsquo;affiche à vous la configuration où charger les données. Il y a de forte chance que vous vous retrouviez avec l&rsquo;un de mes Paths. Changer alors le chemin pour pointer vers votre BDD.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="795" height="622" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_2_report.jpg" alt="" class="wp-image-3054" style="width:445px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_2_report.jpg 795w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_2_report-300x235.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_2_report-768x601.jpg 768w" sizes="auto, (max-width: 795px) 100vw, 795px" /></figure>
</div>


<p>Dans la nouvelle fenêtre qui apparait, en premier lieu sélectionner en source de données <strong>SQLite3 Datasource</strong>. Modifier le chemin afin que celui soit de la forme <strong>database=&lt;path></strong>.</p>



<p>En guise de clause de réduction de ligne, choisissez <strong>LIMIT</strong>, puis confirmer la modification.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="697" height="523" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_3_report.jpg" alt="" class="wp-image-3055" style="width:417px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_3_report.jpg 697w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_3_report-300x225.jpg 300w" sizes="auto, (max-width: 697px) 100vw, 697px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3003_3d572e-03"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Chargement des données</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Il ne reste alors qu&rsquo;à charger, actualiser les données dans le rapport existant.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="220" class="wp-image-3053" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_4_report.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_4_report.jpg 1096w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_4_report-300x120.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_4_report-1024x410.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_4_report-768x308.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="395" class="wp-image-3052" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_5_report.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_5_report.jpg 497w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_5_report-300x215.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p>Normalement et il y a peu de chance que ce ne soit pas le cas, vous devriez avoir une multitude de coche vert en face de chaque table vous annonçant que les données ont été chargé avec succès.</p>
</div></div></div>
</div></div></div>



<p></p>



<p>Une fois les données actualisées, vous devriez avoir le rendu ci-dessous par défaut. Il vous faudra alors jouer avec les différents filtres et objets de contrôles sur les pages pour coller à vos données.</p>


<div class="kb-gallery-wrap-id-3003_def7b2-3b alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-slider kb-gallery-id-3003_def7b2-3b kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-fade="false" data-slider-dots="true" data-slider-type="slider" data-slider-hover-pause="false" data-slider-auto="1" data-slider-speed="4930" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-slider splide__list"><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-has-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land169 kb-has-image-ratio-land169" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_1_report-1024x575.jpg" width="1024" height="575" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_1_report.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_1_report.jpg" data-id="3036" class="wp-image-3036 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_1_report-1024x575.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_1_report-300x168.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_1_report-768x431.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_1_report.jpg 1313w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div><div class="kadence-blocks-gallery-item__caption">Simulation Data</div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-has-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land169 kb-has-image-ratio-land169" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_3_report-1024x574.jpg" width="1024" height="574" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_3_report.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_3_report.jpg" data-id="3043" class="wp-image-3043 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_3_report-1024x574.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_3_report-300x168.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_3_report-768x430.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_3_report.jpg 1315w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div><div class="kadence-blocks-gallery-item__caption">Global View</div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-has-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land169 kb-has-image-ratio-land169" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_2_report-1024x576.jpg" width="1024" height="576" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_2_report.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_2_report.jpg" data-id="3042" class="wp-image-3042 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_2_report-1024x576.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_2_report-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_2_report-768x432.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_2_report.jpg 1312w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div><div class="kadence-blocks-gallery-item__caption">Global View By Customers</div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-has-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land169 kb-has-image-ratio-land169" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_4_report-1024x576.jpg" width="1024" height="576" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_4_report.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_4_report.jpg" data-id="3041" class="wp-image-3041 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_4_report-1024x576.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_4_report-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_4_report-768x432.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_4_report.jpg 1329w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div><div class="kadence-blocks-gallery-item__caption">Summary</div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-has-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land169 kb-has-image-ratio-land169" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_5_report-1024x576.jpg" width="1024" height="576" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_5_report.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_5_report.jpg" data-id="3040" class="wp-image-3040 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_5_report-1024x576.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_5_report-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_5_report-768x432.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_5_report.jpg 1327w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div><div class="kadence-blocks-gallery-item__caption">Current Week</div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-has-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land169 kb-has-image-ratio-land169" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_6_report-1024x577.jpg" width="1024" height="577" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_6_report.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_6_report.jpg" data-id="3039" class="wp-image-3039 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_6_report-1024x577.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_6_report-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_6_report-768x433.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_6_report.jpg 1329w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div><div class="kadence-blocks-gallery-item__caption">Current Month</div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-has-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land169 kb-has-image-ratio-land169" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_7_report-1024x577.jpg" width="1024" height="577" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_7_report.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_7_report.jpg" data-id="3038" class="wp-image-3038 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_7_report-1024x577.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_7_report-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_7_report-768x433.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_7_report.jpg 1330w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div><div class="kadence-blocks-gallery-item__caption">Current Year</div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-has-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land169 kb-has-image-ratio-land169" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_8_report-1024x576.jpg" width="1024" height="576" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_8_report.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_8_report.jpg" data-id="3037" class="wp-image-3037 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_8_report-1024x576.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_8_report-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_8_report-768x432.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_8_report.jpg 1313w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div><div class="kadence-blocks-gallery-item__caption">License Inventory</div></div></figure></div></div></li></ul></div></div></div></div>


<p></p>



<p>Si nous revenons à la problématique initiale, l&rsquo;ensemble des points ont été traité. Au delà de l&rsquo;aspect graphique qui permet rapidement d&rsquo;avoir une visibilité de la compliance ou non des jobs de protection sur une période donnée, il sera nécessaire de jouer avec les filtres sur les pages afin de choisir :</p>



<ul class="wp-block-list">
<li>Le nom de l&rsquo;organisation</li>



<li>Le job ou l&rsquo;ensemble des jobs concernés</li>
</ul>



<p>Les graphiques ou charts pour nos amis anglophones c&rsquo;est un fait. Mais je préfère cette vue.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_4_report-1024x576.jpg" alt="" class="wp-image-3041" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_4_report-1024x576.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_4_report-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_4_report-768x432.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_009_4_report.jpg 1329w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Nous avons ainsi une visibilité mensuelle pour l&rsquo;ensemble des jobs de protection pour une organisation. Comme évoqué précédemment, il est possible de jouer avec les filtres pour définir une organisation ou un job spécifique.</p>



<p>J&rsquo;ai volontairement ajouté en parallèle les messages pour les états or <mark style="background-color:rgba(0, 0, 0, 0);color:#40b03e" class="has-inline-color">Success</mark> facilitant ainsi le reporting ainsi que les actions à engager. </p>



<p>Concrètement, mon SI à la maison est loin des 98% de disponibilités que je me suis fixé. (Dois je envisager de former et d&#8217;embaucher mes enfants à réaliser le MCO de l&rsquo;infra maison ? Une tablette de chocolat Lindt 85% /semaine exonérée de taxe ça devrait le faire 🙂 ) </p>



<p>Dans la partie 3, je vais simplement résumer en une vidéo, la partie installation ainsi que la partie exploitation. Toutefois, je pense que cette dernière partie arrivera plus tard. </p>



<p>Pour le coup, <a href="https://www.youtube.com/watch?v=yFX8pOl0cdU&amp;ab_channel=Nestl%C3%A9KITKAT">il me faut un break, il me faut un kit kat.</a> J&rsquo;ai pas mal charbonné pour ne pas dire souffert pour accoucher de cet article. J&rsquo;ai surestimé mes capacités et d&rsquo;une fièvre créative, j&rsquo;ai mené deux projets de grosse envergure qui m&rsquo;ont bien fatigué. A ce moment précis, il se passe un mois et demi entre la version béta et la rédaction du billet. Mais voyez vous, je crois que je tiens quelque chose qui pourrait plaire à beaucoup de SysAdmin et je serai heureux de faire vivre cette petite application&#8230; </p>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://www.microsoft.com/fr-fr/power-platform/products/power-bi/downloads">Microsoft PowerBI</a></li>



<li><a href="http://www.ch-werner.de/sqliteodbc/">SQLite ODBC Driver</a></li>



<li><a href="https://sqlitebrowser.org/dl/">DB Browser SQLite</a></li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-green-ray-veeam-reporting-partie-1-theorie/">Partie 1 : Théorie</a><br>&lt;&#8212;</td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-green-ray-veeam-reporting/">PROJET &#8211; Green Ray</a></td><td class="has-text-align-center" data-align="center">Partie 3 : Démonstration<br>&#8212;&gt;</td></tr></tbody></table></figure>



<p></p>


<ol class="wp-block-footnotes"><li id="ee7c9a30-d560-48eb-b268-416c7256ebf8"><strong>MO : </strong>Mode Opératoire <a href="#ee7c9a30-d560-48eb-b268-416c7256ebf8-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="b4eac81d-3adb-45e1-9aa0-2bab1f481a5f"><strong>TLS :</strong> Transport Layer Security <a href="#b4eac81d-3adb-45e1-9aa0-2bab1f481a5f-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="b78d2143-c4ef-4fe7-9820-01c547073755"><strong>ODBC :</strong> Open Database Connectivity <a href="#b78d2143-c4ef-4fe7-9820-01c547073755-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="f76b3d5c-ce24-4782-943c-44601ce44c15"><strong>DB :</strong> Database <a href="#f76b3d5c-ce24-4782-943c-44601ce44c15-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="6ac8a1eb-1f38-45e9-9889-bce49a21cacb"><strong>VSPC :</strong> VEEAM Service Provider Console <a href="#6ac8a1eb-1f38-45e9-9889-bce49a21cacb-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="df8e991f-771d-4e79-a601-683d47b863fc"><strong>API :</strong> Application Programming Interface <a href="#df8e991f-771d-4e79-a601-683d47b863fc-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="d0b927df-a474-4a9f-92af-8479cbd88b6e"><strong>SMTP :</strong> Simple Mail Transport Protocol <a href="#d0b927df-a474-4a9f-92af-8479cbd88b6e-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="c28f00e8-df46-48d6-8047-93395fbff264"><strong>URL :</strong> Uniform Resource Locator  <a href="#c28f00e8-df46-48d6-8047-93395fbff264-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="918cc4b5-01e8-42e0-b80e-2d5738c4b391"><strong>LD :</strong> Liste Distribuée <a href="#918cc4b5-01e8-42e0-b80e-2d5738c4b391-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="91cabf03-a1e9-4ef4-b59a-c2f5e1b60461"><strong>BAL :</strong> Boite aux lettres  <a href="#91cabf03-a1e9-4ef4-b59a-c2f5e1b60461-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="f4e5048f-3e52-42ca-a735-fc19f6a459b7"><strong>FQDN :</strong> Fully Qualified Domain Name  <a href="#f4e5048f-3e52-42ca-a735-fc19f6a459b7-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="0e56f8df-8f87-4746-8b6d-b69805292bb2"><strong>gMSA :</strong> Group Managed Service Accounts <a href="#0e56f8df-8f87-4746-8b6d-b69805292bb2-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="6a54e67f-ce8b-4a79-9b9f-2cba488bfaed"><strong>CLI :</strong> Command Line <a href="#6a54e67f-ce8b-4a79-9b9f-2cba488bfaed-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="76c6ad3d-e064-431b-870c-3f2a7299436f"><strong>ISE :</strong> Integrated Scripting Environnement  <a href="#76c6ad3d-e064-431b-870c-3f2a7299436f-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="dace3ace-7f13-4c66-afae-139b38ca5505"><strong>MLD :</strong> Modèle Logique des Données <a href="#dace3ace-7f13-4c66-afae-139b38ca5505-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
