From 12419bda5ced4df2da5f3a24a9df24f0cb48b960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tristan=20POIR=C3=89?= Date: Thu, 4 Dec 2025 18:45:59 +0100 Subject: [PATCH] first commit --- app.log | 3 +++ app.ps1 | 55 ++++++++++++++++++++++++++++++++++++++++++ groups.json | 4 +++ modules/AdService.ps1 | 26 ++++++++++++++++++++ modules/ApiService.ps1 | 0 modules/LogService.ps1 | 36 +++++++++++++++++++++++++++ 6 files changed, 124 insertions(+) create mode 100644 app.log create mode 100644 app.ps1 create mode 100644 groups.json create mode 100644 modules/AdService.ps1 create mode 100644 modules/ApiService.ps1 create mode 100644 modules/LogService.ps1 diff --git a/app.log b/app.log new file mode 100644 index 0000000..b4345d3 --- /dev/null +++ b/app.log @@ -0,0 +1,3 @@ +[2025-12-04 18:33:16] [INFO] Début du script +[2025-12-04 18:33:53] [INFO] Début du script +[2025-12-04 18:33:53] [INFO] Début du script diff --git a/app.ps1 b/app.ps1 new file mode 100644 index 0000000..b726b01 --- /dev/null +++ b/app.ps1 @@ -0,0 +1,55 @@ +<# +.SYNOPSIS + Script de synchronisation des listes de diffusion interne vers Brevo via API + +.DESCRIPTION + 1- Le script récupére les groupes à synchroniser depuis le fichier groups.json + 2- puis récupére les informations (courriel, prénom et nom) des membres de chaque groupe ainsi que l'ID Brevo qui + correspond au groupe AD. + 3- Recuperation de la liste des membres de la liste Brevo + 4- Comparaison liste Brevo - groupe AD + 5- opération pour faire correspondre la liste avec le groupe Brevo (ajout, suppresion) + +.NOTES + Auteur : Tristan Poiré + Date : 04/12/2025 + Version : 1.0 +#> + +#--------------------------- +# Début du script +#--------------------------- +Import-Module ActiveDirectory + +# Vérifie si le module ActiveDirectory est chargé +if (-not (Get-Module -ListAvailable -Name ActiveDirectory)) { + Write-Error "Le module ActiveDirectory n'est pas installé." + return +} + +# Logging +# Définir le fichier de log globalement pour ce module +$Global:LogFile = ".\app.log" + +$groupsFile = "groups.json" +$groups = Get-Content $groupsFile | ConvertFrom-Json + +# Récupérer tous les fichiers .ps1 dans le dossier modules +$moduleFiles = Get-ChildItem -Path ".\modules" -Filter "*.ps1" +foreach ($file in $moduleFiles) { + . $file.FullName +} + +foreach ($group in $groups) { + + $GetUsers = GetUsersFromGroup -GroupCN $($group.Nom) + if ($GetUsers.Success === $false) + { + Write-Output $GetUsers.Value + Write-Log $GetUsers.Value + } + else { + Write-Output $GetUsers.Value + } + +} \ No newline at end of file diff --git a/groups.json b/groups.json new file mode 100644 index 0000000..11c4124 --- /dev/null +++ b/groups.json @@ -0,0 +1,4 @@ +[ + { "Nom": "GR_DNA_-_Design_graphique_-_LE_HAVRE-1", "Id": "9" }, + { "Nom": "GR_DNA_-_Design_graphique_-_LE_HAVRE-2", "Id": "10" } +] \ No newline at end of file diff --git a/modules/AdService.ps1 b/modules/AdService.ps1 new file mode 100644 index 0000000..ea0dc0e --- /dev/null +++ b/modules/AdService.ps1 @@ -0,0 +1,26 @@ +function GetUsersFromGroup { + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [string]$GroupCN + ) + + try { + # Récupère les membres du groupe + $members = Get-ADGroupMember -Identity $GroupCN -Recursive | Where-Object { $_.objectClass -eq "user" } + + # Retourne le SamAccountName de chaque utilisateur + $result = [PSCustomObject]@{ + Success = $true + Value = $members | Select-Object -ExpandProperty SamAccountName + } + return $result + } + catch { + $result = [PSCustomObject]@{ Success = $false + Value = "Erreur lors de la récupération des utilisateurs du groupe '$GroupCN' : $_" + } + return $result + } +} + diff --git a/modules/ApiService.ps1 b/modules/ApiService.ps1 new file mode 100644 index 0000000..e69de29 diff --git a/modules/LogService.ps1 b/modules/LogService.ps1 new file mode 100644 index 0000000..8a7eabb --- /dev/null +++ b/modules/LogService.ps1 @@ -0,0 +1,36 @@ +<# +.SYNOPSIS + Service de logging pour les scripts PowerShell. +.DESCRIPTION + Fournit une fonction Write-Log qui logge des messages avec timestamp, niveau et fichier de log. +#> + +# Définir le fichier de log globalement pour ce module +$Global:LogFile = ".\app.log" + +function Write-Log { + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [string]$Message, + + [Parameter(Mandatory=$false)] + [ValidateSet("INFO", "WARN", "ERROR")] + [string]$Level = "INFO" + ) + + # Timestamp + $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + $line = "[$timestamp] [$Level] $Message" + + # Affiche à la console + Write-Output $line + + # Écrit dans le fichier de log + try { + Add-Content -Path $Global:LogFile -Value $line + } + catch { + Write-Warning "Impossible d'écrire dans le fichier de log : $_" + } +}