Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

S05 #9

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
206 changes: 206 additions & 0 deletions doc pour nouvelle liste AD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
<div align="center">

![logo](https://github.com/WildCodeSchool/TSSR-2405-P3-G3-BuildYourInfra-Ekoloclast/blob/s04/ressources/charte/ekoloclasttitreok.png)

</div>

# 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 <a name="section1"></a>
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 <a name="section2"></a>
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 <a name="section3"></a>
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 <a name="section4"></a>
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 <a name="section5"></a>
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.
61 changes: 61 additions & 0 deletions gestion pc ou.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<div align="center">

![logo](https://github.com/WildCodeSchool/TSSR-2405-P3-G3-BuildYourInfra-Ekoloclast/blob/s04/ressources/charte/ekoloclasttitreok.png)

</div>
# 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.

37 changes: 37 additions & 0 deletions guide_script.md
Original file line number Diff line number Diff line change
@@ -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.
44 changes: 44 additions & 0 deletions mapping.json
Original file line number Diff line number Diff line change
@@ -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"
}
]
}
Loading