diff --git a/doc pour nouvelle liste AD.md b/doc pour nouvelle liste AD.md new file mode 100644 index 0000000..fa9856d --- /dev/null +++ b/doc pour nouvelle liste AD.md @@ -0,0 +1,206 @@ +
+ +![logo](https://github.com/WildCodeSchool/TSSR-2405-P3-G3-BuildYourInfra-Ekoloclast/blob/s04/ressources/charte/ekoloclasttitreok.png) + +
+ +# Documentation du Script PowerShell pour l'Ajout de Dossiers Personnels +Ce script PowerShell est destiné à automatiser la création de dossiers personnels pour les utilisateurs dans un environnement Active Directory. Il prend en charge l'importation de données utilisateurs depuis un fichier CSV et crée les dossiers correspondants dans une structure de répertoires basée sur les unités organisationnelles (OU) définies dans Active Directory. + +## Sommaire +1.[Vérification et Chargement du Module Active Directory](#1-vérification-et-chargement-du-module-active-directory) +2.[Importation des Données depuis le Fichier CSV](#2-importation-des-données-depuis-le-fichier-csv) +3.[Vérification de l'OU Parent dans Active Directory](#3-vérification-de-lou-parent-dans-active-directory) +4.[Création de Dossiers Basée sur la Structure des OU](#4-création-de-dossiers-basée-sur-la-structure-des-ou) +5.[Création des Dossiers Personnels des Utilisateurs](#5-création-des-dossiers-personnels-des-utilisateurs) +## 1. Vérification et Chargement du Module Active Directory +Code : + +```ps1 +if (-not (Get-Module -Name ActiveDirectory)) { + if (Get-Module -ListAvailable -Name ActiveDirectory) { + Import-Module -Name ActiveDirectory + } else { + Write-Host "Le module Active Directory n'est pas disponible sur ce système." + exit 1 + } +} + +Write-Host "Module Active Directory chargé avec succès." +``` +**Explication** : + +***Objectif*** : Vérifier que le module ActiveDirectory est disponible et le charger. Ce module est essentiel pour interagir avec les objets Active Directory dans PowerShell. + +**Fonctionnement** : + +La commande `Get-Module -Name ActiveDirectory` vérifie si le module est déjà chargé. +Si le module n'est pas chargé, le script essaie de le trouver avec `Get-Module -ListAvailable -Name ActiveDirectory` et l'importe si disponible. +Si le module n'est pas disponible, le script affiche un message d'erreur et s'arrête (exit 1). +**Conclusion** : Cette section garantit que le script dispose des outils nécessaires pour interagir avec Active Directory. + +## 2. Importation des Données depuis le Fichier CSV +Code : + +```ps1 +$csvFilePath = "C:\Users\Administrateur\Documents\Annexe4ok.txt" + +try { + $data = Import-Csv -Path $csvFilePath -Delimiter "," + $lineNumber = 1 + + foreach ($row in $data) { + if ($row -ne $null) { + Write-Host "Ligne $lineNumber :" + foreach ($prop in $row.PSObject.Properties) { + Write-Host " $($prop.Name) : $($prop.Value)" + } + } + $lineNumber++ + } +} catch { + Write-Host "Erreur lors de l'importation du fichier CSV : $_" +} +``` +**Explication** : + +***Objectif*** : Charger les informations des utilisateurs depuis un fichier CSV spécifié par $csvFilePath. + +**Fonctionnement** : + +Le fichier CSV est importé à l'aide de Import-Csv. +Chaque ligne du CSV représente un utilisateur, et les données sont affichées pour vérification. +Si une erreur se produit lors de l'importation du fichier, le script affiche un message d'erreur. + +***Conclusion*** : Cette section du script lit les données des utilisateurs et les prépare pour la création des dossiers. + +## 3. Vérification de l'OU Parent dans Active Directory +Code : + +```ps1 + +$parentOU = "OU=Paris,DC=Projet3,DC=lan" + +try { + $parentOUObject = Get-ADOrganizationalUnit -Identity $parentOU -ErrorAction Stop + Write-Host "L'OU parent '$parentOU' a été trouvé." +} catch { + Write-Host "Erreur : L'OU parent '$parentOU' n'a pas été trouvé. Vérifiez que le DN est correct." + exit 1 +} +``` +**Explication** : + +***Objectif*** : Vérifier l'existence de l'OU parent spécifiée dans Active Directory pour s'assurer que le script peut y accéder. + +**Fonctionnement** : + +La commande `Get-ADOrganizationalUnit -Identity $parentOU` tente de récupérer l'OU parent. +Si l'OU n'est pas trouvée, le script s'arrête avec un message d'erreur pour éviter de continuer sans une base valide. + +***Conclusion*** : Cette étape est cruciale pour garantir que le script peut correctement naviguer dans la structure d'Active Directory. + +## 4. Création de Dossiers Basée sur la Structure des OU +Code : + +```ps1 + +$baseFolderPath = "D:" + +function Create-FoldersForOUs { + param ( + [string]$currentOU, + [string]$currentPath + ) + + try { + $subOUs = Get-ADOrganizationalUnit -Filter * -SearchBase $currentOU -SearchScope OneLevel + } catch { + Write-Host "Erreur lors de l'obtention des sous-OUs de '$currentOU' : $_" + return + } + + foreach ($subOU in $subOUs) { + $ouName = $subOU.Name + $folderPath = Join-Path -Path $currentPath -ChildPath $ouName + + if (-Not (Test-Path -Path $folderPath)) { + try { + New-Item -Path $folderPath -ItemType Directory + Write-Host "Le dossier '$folderPath' a été créé." + } catch { + Write-Host "Erreur lors de la création du dossier '$folderPath': $_" + } + } else { + Write-Host "Le dossier '$folderPath' existe déjà." + } + + Create-FoldersForOUs -currentOU $subOU.DistinguishedName -currentPath $folderPath + } +} + +Create-FoldersForOUs -currentOU $parentOU -currentPath $baseFolderPath +``` +**Explication** : + +***Objectif*** : Créer une structure de dossiers basée sur les sous-OUs de l'OU parent dans Active Directory. + +***Fonctionnement*** : + +La fonction Create-FoldersForOUs est définie pour parcourir récursivement les sous-OUs et créer des dossiers correspondants sur le disque. +Chaque sous-OU devient un dossier sous le chemin spécifié par $currentPath. +Si un dossier existe déjà, il n'est pas recréé, et le script passe à l'OU suivante. + +***Conclusion*** : Cette section permet de refléter la structure de l'OU dans le système de fichiers, facilitant ainsi l'organisation des dossiers. + +## 5. Création des Dossiers Personnels des Utilisateurs +Code : + +```ps1 + +$personalFolderPath = "D:\Dossiers Individuels" + +if (-Not (Test-Path -Path $personalFolderPath)) { + try { + New-Item -Path $personalFolderPath -ItemType Directory + Write-Host "Le dossier de base '$personalFolderPath' a été créé." + } catch { + Write-Host "Erreur lors de la création du dossier de base '$personalFolderPath': $_" + exit 1 + } +} + +foreach ($row in $data) { + if ($row -ne $null) { + $username = $row.Prenom +" "+ $row.Nom + $folderPath = Join-Path -Path $personalFolderPath -ChildPath $username + + if (-Not (Test-Path -Path $folderPath)) { + try { + New-Item -Path $folderPath -ItemType Directory + Set-ADUser -Identity "$username" -HomeDirectory "\\WIN22P3\Dossiers Individuels$\$username" -HomeDrive "I:" + Write-Host "Le dossier '$folderPath' a été créé pour l'utilisateur '$username'." + } catch { + Write-Host "Erreur lors de la création du dossier '$folderPath' pour l'utilisateur '$username': $_" + } + } else { + Write-Host "Le dossier '$folderPath' pour l'utilisateur '$username' existe déjà." + } + } +} +``` +**Explication** : + +***Objectif*** : Créer un dossier personnel pour chaque utilisateur listé dans le fichier CSV sous un chemin de base spécifié. + +***Fonctionnement*** : + +Le script vérifie d'abord si le dossier de base pour les utilisateurs ($personalFolderPath) existe. +S'il n'existe pas, il est créé. +Pour chaque utilisateur dans le fichier CSV, un dossier est créé avec son nom, et ce dossier est assigné comme HomeDirectory dans Active Directory. +Si le dossier existe déjà pour un utilisateur, un message est affiché et le script passe à l'utilisateur suivant. + +***Conclusion*** : Cette étape finalise le processus en créant les dossiers utilisateurs et en configurant leur HomeDirectory dans Active Directory. + +### Conclusion +Ce script est un outil puissant pour les administrateurs système, leur permettant de créer et d'organiser des dossiers utilisateurs en fonction des structures d'Active Directory et des informations extraites d'un fichier CSV. diff --git a/gestion pc ou.md b/gestion pc ou.md new file mode 100644 index 0000000..dbd53b6 --- /dev/null +++ b/gestion pc ou.md @@ -0,0 +1,61 @@ +
+ +![logo](https://github.com/WildCodeSchool/TSSR-2405-P3-G3-BuildYourInfra-Ekoloclast/blob/s04/ressources/charte/ekoloclasttitreok.png) + +
+# Placement automatique des poste client +## Prérequi +- Script powreshell +- GPO +## Scriipt powershell +Le script s'executera lors de la jonction du poste client au domaine, il prendra la liste du fichier **mapping.json** qu'il faut modifier en fonction des services. +Ce script déterminera le service auquel l'ordinateur appartient et il déplacera l'objet ordinateur dans l'OU appropriée. +Le script et le fichier mapping doivent être dans un dossier partager accéssible au ordinateur du domaine. + +### 1. Création de la GPO : + + a. Ouvrez la console "Group Policy Management" (gpmc.msc). + b. Faites un clic droit sur votre domaine ou sur une OU spécifique. + c. Sélectionnez "Créer un objet GPO dans ce domaine,et le lier ici...". + d. Nommez la GPO . + +### 2. Configuration de la GPO : + + a. Éditez la nouvelle GPO. + b. Naviguez vers : Configuration ordinateur > Stratégies > Paramètres Windows > Scripts (Démarrage/Arrêt du système). + c. Double-cliquez sur "Demarrage". + d. Cliquez sur "Ajouter". + e. Dans "Nom du script", entrez : powershell.exe + f. Dans "Paramètres d scripts", entrez : -ExecutionPolicy Bypass -File ```"\\chemin vers le script.ps1"``` + +### 3. Configuration des permissions : + + a. Assurez-vous que les poste client ont accès en lecture au script et au dossier qui le contient. + b. Donnez les permissions nécessaires pour le dossier de logs et le fichier de configuration. + +### 4. Application de la GPO : + + a. Si vous avez créé la GPO au niveau du domaine, elle s'appliquera à tous les ordinateurs. + b. Pour cibler des OUs spécifiques, liez la GPO à ces OUs. + +## Application aux PC déjà joints au domaine : + + a. La GPO s'appliquera automatiquement lors du prochain redémarrage des PC. + b. Pour forcer l'application sans redémarrage : + - Sur chaque PC, ouvrez une invite de commande en tant qu'administrateur. + - Exécutez : `gpupdate /force` + - Puis exécutez : `shutdown /r /t 0` pour redémarrer directement(nécessaire pour les scripts de démarrage). + +### Vérification : + + a. Sur un PC test, exécutez `gpresult /r` pour vérifier que la GPO est appliquée. + b. Vérifiez les logs du script pour confirmer son exécution. + +### Dépannage : + + a. Utilisez "Group Policy Results" dans la console GPMC pour diagnostiquer les problèmes. + b. Vérifiez les journaux d'événements Windows sur les PC clients. + + +Cette approche permet non seulement d'appliquer la GPO aux nouveaux PC rejoignant le domaine, mais aussi de réorganiser les PC existants dans les bonnes OUs. + diff --git a/guide_script.md b/guide_script.md new file mode 100644 index 0000000..52f81c2 --- /dev/null +++ b/guide_script.md @@ -0,0 +1,37 @@ +# Mise à jour de l'Active Directory par l'intermédiaire d'un fichier .CSV +## Introduction +Ce script est conçu pour mettre à jour l'Active Directory en utilisant un fichier .CSV. Le fichier .CSV contient des informations sur les nouveaux employés, les modifications d'utilisateurs existants et les changements de noms de départements. + +## Étapes du Script +1. Chargement du Module Active Directory +Le script commence par charger le module Active Directory sur le serveur. Cela permet d'interagir avec l'Active Directory pendant l'exécution du script. + +![charg AD](https://github.com/user-attachments/assets/1e59f796-decd-4010-a1a9-f2ed7cd2ee2c) + +2. Renommage des OU et Déplacement +Le script renomme les unités d'organisation (OU) à modifier. Les utilisateurs apparaissent avec le nouveau nom de leur OU dans le fichier .CSV. De plus, l'OU "formation" est déplacée dans le département DSI. + +![renom OU et deplacement](https://github.com/user-attachments/assets/8a867c82-31bd-4ec5-b36f-f4c47ceab827) + +3. Chargement des Fichiers .CSV et Comparaison +Le script charge deux fichiers .CSV : l'un contenant les informations actuelles et l'autre contenant les nouvelles informations. Il compare ces fichiers pour identifier les employés qui sont partis et les nouveaux arrivants. Un fichier nommé employes_partis est créé avec le nom des employés qui ne sont plus dans l'entreprise. + +![comparaison de fichiers](https://github.com/user-attachments/assets/2de7cba3-e92f-4f5a-84c7-6516c4b91dd0) + +4. Modification des Logins des Employés +Le script modifie les logins des employés. Les nouveaux logins sont générés en utilisant la première lettre du prénom de l'employé, suivie de leur nom et d'un nombre aléatoire. + +![login](https://github.com/user-attachments/assets/98af1091-39d5-431a-b3c7-339b9aa7c09b) + +5. Mise à Jour des Employés dans l'Active Directory +Le script met à jour les informations des employés dans l'Active Directory en utilisant les données du fichier .CSV. + +![MAJ AD](https://github.com/user-attachments/assets/e9eedce7-c2e7-4014-884b-b3f0ec5c1ac0) + +6. Désactivation des Comptes Utilisateurs Partis +Enfin, le script désactive les comptes des utilisateurs qui ne font plus partie de l'entreprise. Cette action est basée sur le fichier employes_partis créé précédemment. + +![employes partis](https://github.com/user-attachments/assets/30bd957f-7b93-4f63-b163-56350a8ef99b) + +Conclusion +Ce script automatise la mise à jour de l'Active Directory en utilisant un fichier .CSV, ce qui permet de gérer efficacement les nouveaux employés, les modifications d'utilisateurs et les changements de noms de départements. \ No newline at end of file diff --git a/mapping.json b/mapping.json new file mode 100644 index 0000000..b95719f --- /dev/null +++ b/mapping.json @@ -0,0 +1,44 @@ +{ + "services": [ + { + "prefix": "Fin[0-9]{3}", + "name": "Direction Financiere" + }, + { + "prefix": "Ven[0-9]{3}", + "name": "Ventes et Developpement Commercial" + }, + { + "prefix": "Com[0-9]{3}", + "name": "Communication" + }, + { + "prefix": "RH[0-9]{3}", + "name": "RH" + }, + { + "prefix": "Dsi[0-9]{3}", + "name": "DSI" + }, + { + "prefix": "Jur[0-9]{3}", + "name": "Service Juridique" + }, + { + "prefix": "Dg[0-9]{3}", + "name": "Direction Generale" + }, + { + "prefix": "Mar[0-9]{3}", + "name": "Direction Marketing" + }, + { + "prefix": "RD[0-9]{3}", + "name": "R&D" + }, + { + "prefix": "Gen[0-9]{3}", + "name": "Service Generaux" + } + ] +} \ No newline at end of file diff --git a/placepc.ps1 b/placepc.ps1 new file mode 100644 index 0000000..45437cf --- /dev/null +++ b/placepc.ps1 @@ -0,0 +1,67 @@ +# Script de placement automatique des ordinateurs dans les OU appropriées +# Nom du fichier : PlacePC.ps1 + +# Importation du module Active Directory +Import-Module ActiveDirectory + +# Définition des variables +$computerName = $env:COMPUTERNAME +$domainName = "dams.lan" +$logPath = "\\WIN-SERV22\log$\placement_pc.log" +$configPath = "\\WIN-SERV22\ressources\mapping.json" + +# Fonction de journalisation +function Log-Message { + param([string]$message) + $logEntry = "$(Get-Date) - $message" + Add-Content -Path $logPath -Value $logEntry + Write-Host $logEntry +} + +# Chargement de la configuration +try { + $config = Get-Content $configPath -ErrorAction Stop | ConvertFrom-Json + Log-Message "Configuration chargée avec succès" +} +catch { + Log-Message "Erreur lors du chargement de la configuration : $_" + exit +} + +# Détermination du service +$service = $config.services | Where-Object { $computerName -like $_.prefix } | Select-Object -ExpandProperty name -First 1 + +if (-not $service) { + $service = "AutresServices" + Log-Message "Aucun service correspondant trouvé pour $computerName. Utilisation de 'AutresServices'" +} +else { + Log-Message "Service déterminé pour $computerName : $service" +} + +# Gestion des cas spéciaux +if ($computerName -like "SRV*") { + $ouPath = "OU=Serveurs,DC=$($domainName.Split('.')[0]),DC=$($domainName.Split('.')[1])" + Log-Message "Ordinateur $computerName identifié comme serveur" +} +else { + $ouPath = "OU=$service,OU=Ordinateurs,DC=$($domainName.Split('.')[0]),DC=$($domainName.Split('.')[1])" +} + +# Vérification de l'existence de l'OU et déplacement de l'objet +try { + if (Get-ADOrganizationalUnit -Filter "DistinguishedName -eq '$ouPath'" -ErrorAction Stop) { + $computerDN = (Get-ADComputer $computerName).DistinguishedName + Move-ADObject -Identity $computerDN -TargetPath $ouPath -ErrorAction Stop + Log-Message "Ordinateur $computerName déplacé avec succès dans $ouPath" + } + else { + throw "L'OU $ouPath n'existe pas" + } +} +catch { + Log-Message "Erreur lors du déplacement de l'ordinateur : $_" + Log-Message "L'ordinateur $computerName reste dans son emplacement actuel" +} + +Log-Message "Opération terminée pour $computerName" \ No newline at end of file