INRACI PowerShell & Windows Server — 5ème SIPS3
0 / 0
Révision Examen 2025-26

Scripts PowerShell
& Windows Server

Gestion des utilisateurs, groupes, GPO, partage de dossiers et sauvegarde automatique. Tout ce qu'il faut maîtriser pour l'examen SIPS3.

01
📁 Script PowerShell
Créer l'arborescence de dossiers

Créer la structure Study Folder avec Subject 1..n, sessions, et fichiers .txt via un script PowerShell automatisé.

Structure attendue : Study Folder → Subject 1..N → Session 1..M + Biographic data + Psychometric data → Physiological data / Videos / Audios / Annotation file / session-level psychometric data (tous en .txt)
Study Folder/ ├── Subject 1/ │ ├── Session 1/ │ │ ├── Physiological data.txt │ │ ├── Videos.txt │ │ └── Audios.txt │ ├── Session 2/ │ │ └── ... │ ├── Session M/ │ │ └── ... │ ├── Biographic data.txt │ └── Psychometric data/ │ ├── Annotation file.txt │ └── session-level psychometric data.txt ├── Subject 2/ │ └── ... └── Subject N/ └── ...
📁
Script — Création arborescence
New-Item + foreach + paramètres
# ── Variables de configuration ──
$desktop = [Environment]::GetFolderPath("Desktop")
$root = "$desktop\Study Folder"
$nbSubjects = 3 # Nombre de sujets
$nbSessions = 2 # Sessions par sujet
# ── Créer le dossier racine ──
New-Item -ItemType Directory -Path $root -Force
# ── Boucle pour chaque Subject ──
for ($i = 1; $i -le $nbSubjects; $i++) {
$subPath = "$root\Subject $i"
New-Item -ItemType Directory -Path $subPath -Force
# ── Sessions ──
for ($j = 1; $j -le $nbSessions; $j++) {
$sesPath = "$subPath\Session $j"
New-Item -ItemType Directory -Path $sesPath -Force
New-Item -Path "$sesPath\Physiological data.txt" -Force
New-Item -Path "$sesPath\Videos.txt" -Force
New-Item -Path "$sesPath\Audios.txt" -Force
}
# ── Biographic data ──
New-Item -Path "$subPath\Biographic data.txt" -Force
# ── Psychometric data ──
$psychoPath = "$subPath\Psychometric data"
New-Item -ItemType Directory -Path $psychoPath -Force
New-Item -Path "$psychoPath\Annotation file.txt" -Force
New-Item -Path "$psychoPath\session-level psychometric data.txt" -Force
}
Write-Host "✅ Arborescence créée !" -ForegroundColor Green
💡
Commandes clés à retenir
New-Item, -ItemType, -Force
CmdletRôle
New-Item -ItemType DirectoryCrée un dossier
New-Item -ItemType FileCrée un fichier
-ForceNe génère pas d'erreur si existe déjà
-PathChemin complet du dossier/fichier
for ($i=1; $i -le $n; $i++)Boucle for PowerShell
GetFolderPath("Desktop")Chemin du Bureau
⚠️ Attention : Utilisez -Force pour éviter les erreurs si le dossier existe déjà. Sans -Force, le script crashe si l'arborescence est re-exécutée.
02
👥 Utilisateurs & Groupes
Script de gestion — Menu interactif

Menu à 6 options : créer/supprimer utilisateurs, créer/supprimer groupes, ajouter/retirer un utilisateur d'un groupe. Avec gestion d'erreurs.

🎛️
Menu principal + structure
do-while + switch
# ── Menu principal (boucle do-while) ──
do {
Clear-Host
Write-Host "=== GESTION UTILISATEURS ==="
Write-Host "1 - Créer un utilisateur"
Write-Host "2 - Supprimer un utilisateur"
Write-Host "3 - Créer un groupe"
Write-Host "4 - Supprimer un groupe"
Write-Host "5 - Ajouter user dans groupe"
Write-Host "6 - Retirer user d'un groupe"
Write-Host "7 - Modifier profil utilisateur"
Write-Host "0 - Quitter"
$choix = Read-Host "Votre choix"
switch ($choix) {
"1" { CreerUtilisateur }
"2" { SupprimerUtilisateur }
"3" { CreerGroupe }
"4" { SupprimerGroupe }
"5" { AjouterDansGroupe }
"6" { RetirerDuGroupe }
"7" { ModifierProfil }
"0" { Write-Host "Au revoir !" }
default { Write-Host "Choix invalide !" -ForegroundColor Red }
}
} while ($choix -ne "0")
👤
Fonction — Créer utilisateur
New-LocalUser avec contraintes
# ── Fonction création utilisateur ──
function CreerUtilisateur {
$login = Read-Host "Login de l'utilisateur"
$pswd = Read-Host "Mot de passe" -AsSecureString
# ── Vérifier si l'utilisateur existe ──
if (Get-LocalUser -Name $login -ErrorAction SilentlyContinue) {
Write-Host "⚠️ Utilisateur existe déjà !" -ForegroundColor Red
return
}
# ── Créer l'utilisateur ──
New-LocalUser -Name $login \
-Password $pswd \
-PasswordNeverExpires \
-UserMayNotChangePassword
Write-Host "✅ Utilisateur $login créé !" -ForegroundColor Green
}
🗑️
Supprimer utilisateur / groupe
Remove-LocalUser, Remove-LocalGroup
# ── Supprimer un utilisateur ──
function SupprimerUtilisateur {
$login = Read-Host "Login à supprimer"
if (Get-LocalUser -Name $login -ErrorAction SilentlyContinue) {
Remove-LocalUser -Name $login
Write-Host "✅ $login supprimé !" -ForegroundColor Green
} else {
Write-Host "⚠️ Utilisateur introuvable !" -ForegroundColor Red
}
}
# ── Créer un groupe ──
function CreerGroupe {
$groupe = Read-Host "Nom du groupe"
if (Get-LocalGroup -Name $groupe -ErrorAction SilentlyContinue) {
Write-Host "⚠️ Groupe existe déjà !" -ForegroundColor Red
} else {
New-LocalGroup -Name $groupe
Write-Host "✅ Groupe $groupe créé !" -ForegroundColor Green
}
}
🔗
Ajouter / Retirer d'un groupe
Add-LocalGroupMember, Remove-LocalGroupMember
# ── Ajouter un utilisateur dans un groupe ──
function AjouterDansGroupe {
$login = Read-Host "Utilisateur"
$groupe = Read-Host "Groupe"
try {
Add-LocalGroupMember -Group $groupe -Member $login
Write-Host "✅ $login ajouté à $groupe !" -ForegroundColor Green
} catch {
Write-Host "❌ Erreur : $_" -ForegroundColor Red
}
}
# ── Retirer un utilisateur d'un groupe ──
function RetirerDuGroupe {
$login = Read-Host "Utilisateur"
$groupe = Read-Host "Groupe"
try {
Remove-LocalGroupMember -Group $groupe -Member $login
Write-Host "✅ $login retiré de $groupe !" -ForegroundColor Green
} catch {
Write-Host "❌ Erreur : $_" -ForegroundColor Red
}
}
🔢
Exercice 3 avancé — Boucle for : Etudiant1..N dans Classe1..N
for loop + automatisation des noms
# ── Créer N étudiants automatiquement ──
$nb = Read-Host "Combien d'utilisateurs ?"
$pswd = ConvertTo-SecureString "Inraci#2025" -AsPlainText -Force
for ($i = 1; $i -le $nb; $i++) {
$name = "Etudiant$i"
if (-not (Get-LocalUser -Name $name -ErrorAction SilentlyContinue)) {
New-LocalUser -Name $name -Password $pswd -PasswordNeverExpires -UserMayNotChangePassword
Write-Host "✅ $name créé" -ForegroundColor Green
} else {
Write-Host "⚠️ $name existe déjà" -ForegroundColor Yellow
}
}
# ── Créer N classes et ajouter EtudiantI dans ClasseI ──
for ($i = 1; $i -le $nb; $i++) {
New-LocalGroup -Name "Classe$i" -ErrorAction SilentlyContinue
Add-LocalGroupMember -Group "Classe$i" -Member "Etudiant$i"
Write-Host "✅ Etudiant$i → Classe$i" -ForegroundColor Green
}
03
🔒 Stratégies de sécurité
GPO — Group Policy Object

Appliquer des stratégies de sécurité pour les utilisateurs non-administrateurs via les GPO Windows. Également : créer l'utilisateur secrétaire avec les restrictions avancées.

⚠️ Important : Les GPO se configurent via gpedit.msc (Local) ou la console GPMC sur Windows Server. Ces paramètres ne peuvent PAS tous être faits en PowerShell pur — certains nécessitent l'interface graphique ou le module GroupPolicy.
🛡️
Restrictions à appliquer (GPO)
Pour tous les non-administrateurs
RestrictionChemin GPO
Panneau de configurationConfig Utilisateur → Modèles admin → Panneau de config → Prohibit access
Invite de commande (CMD)Config Utilisateur → Système → Prevent access to cmd
Arrêter l'ordinateurConfig Utilisateur → Menu Démarrer → Remove Shut Down
Verrouiller l'écranConfig Utilisateur → Système → Remove Lock Computer
Installer logicielsConfig Ordi → Paramètres Windows → Sécurité → Logiciels
Internet ExplorerConfig Utilisateur → Composants Windows → IE → Disable IE
Effacer historique nav.Config Utilisateur → Composants Windows → IE → Delete browsing history
Arrêter un scriptConfig Utilisateur → Système → Scripts
👩‍💼
Utilisateur "Secrétaire" — Script PowerShell
Avec mot de passe + verrouillage + complexité
# ── Créer l'utilisateur secrétaire ──
$pswd = ConvertTo-SecureString "Inraci#2021" -AsPlainText -Force
New-LocalUser -Name "secretaire" \
-Password $pswd \
-PasswordNeverExpires \
-UserMayNotChangePassword
# ── Paramètres de verrouillage du compte ── # Via secpol.msc → Stratégie de verrouillage ── # Seuil de verrouillage : 3 tentatives # Durée de verrouillage : 60 minutes # Réinitialisation compteur : 15 minutes # Via PowerShell (net accounts) ──
net accounts /lockoutthreshold:3
net accounts /lockoutduration:60
net accounts /lockoutwindow:15
# ── Interdire les médias amovibles ── # GPO → Config Ordi → Modèles admin # → Système → Accès stockage amovible # → All Removable Storage: Deny all access
🔐
Politique de mot de passe
secpol.msc ou net accounts
# ── Via net accounts (cmd ou PS) ──
net accounts /minpwlen:8
net accounts /maxpwage:Unlimited
# ── Complexité = secpol.msc ── # Stratégies → Stratégies de compte # → Stratégie de mdp # → La complexité doit être activée # Exigences complexité mot de passe ── # ✅ Min 8 caractères # ✅ Majuscule (A-Z) # ✅ Minuscule (a-z) # ✅ Chiffre (0-9) # ✅ Caractère spécial (!@#$%) # Exemple: Inraci#2021 ✅
Write-Host "Inraci#2021" -ForegroundColor Green
Write-Host "→ Majuscule I, Minuscules, chiffres 2021, # spécial"
📍
Chemin rapide gpedit.msc
Navigation dans l'éditeur GPO

Pour accéder à l'éditeur de stratégies locales :

Win + Rgpedit.msc → Entrée
# ── Structure de l'éditeur ──
Config Ordinateur
└── Paramètres Windows
└── Paramètres de sécurité
└── Stratégies de compte
Config Utilisateur
└── Modèles d'administration
└── Panneau de configuration
└── Système
└── Composants Windows
└── Internet Explorer
04
📂 Partage réseau
Script de gestion des partages

Menu à 4 options : partager un dossier, supprimer un partage, modifier les droits, voir les partages existants.

🔗
Menu partage + Partager un dossier
New-SmbShare + droits
# ── Menu de gestion des partages ──
do {
Write-Host "=== PARTAGE DOSSIERS ==="
Write-Host "1 - Partager un dossier"
Write-Host "2 - Supprimer un partage"
Write-Host "3 - Modifier les droits"
Write-Host "4 - Voir les partages"
Write-Host "0 - Quitter"
$choix = Read-Host "Choix"
switch ($choix) {
"1" { PartagerDossier }
"2" { SupprimerPartage }
"3" { ModifierDroits }
"4" { Get-SmbShare | Format-Table }
}
} while ($choix -ne "0")
# ── Fonction partager un dossier ──
function PartagerDossier {
$chemin = Read-Host "Chemin du dossier (ex: C:\Partage)"
$nom = Read-Host "Nom du partage réseau"
$groupe = Read-Host "Groupe autorisé"
$droits = Read-Host "Droits (Read/Change/Full)"
New-SmbShare -Name $nom -Path $chemin -FullAccess $groupe
Write-Host "✅ Dossier partagé sous \\serveur\$nom" -ForegroundColor Green
}
✏️
Supprimer & Modifier droits
Remove-SmbShare, Grant-SmbShareAccess
# ── Supprimer un partage ──
function SupprimerPartage {
$nom = Read-Host "Nom du partage à supprimer"
if (Get-SmbShare -Name $nom -ErrorAction SilentlyContinue) {
Remove-SmbShare -Name $nom -Force
Write-Host "✅ Partage $nom supprimé" -ForegroundColor Green
} else {
Write-Host "❌ Partage introuvable" -ForegroundColor Red
}
}
# ── Modifier les droits d'un partage ──
function ModifierDroits {
$nom = Read-Host "Nom du partage"
$compte = Read-Host "Utilisateur/Groupe"
$droits = Read-Host "Droits (Read/Change/Full)"
Grant-SmbShareAccess -Name $nom \
-AccountName $compte \
-AccessRight $droits -Force
Write-Host "✅ Droits $droits accordés à $compte sur $nom" -ForegroundColor Green
}
# ── Voir tous les partages ──
Get-SmbShare | Select-Object Name, Path, Description
Get-SmbShareAccess -Name "NomDuPartage"
💡 Niveaux de droits SMB :
Read Lecture seule
Change Lecture + Écriture + Suppression
Full Contrôle total (lecture, écriture, suppression, gestion des droits)
05
💾 Sauvegarde automatique
Script de sauvegarde — 3 types

Sauvegarde Totale (31/12), Différentielle (fin de mois), Incrémentielle (chaque jour). Automatisée via le planificateur de tâches à 20h00.

📋 Les 3 types de sauvegarde :
Totale Copie TOUT le contenu. Le 31/12.
Différentielle Copie tout ce qui a changé depuis la DERNIÈRE TOTALE. Fin de chaque mois.
Incrémentielle Copie tout ce qui a changé depuis la DERNIÈRE SAUVEGARDE (quelle qu'elle soit). Chaque jour.
💾
Script de sauvegarde complet
Get-Date + Copy-Item + Robocopy
# ── Variables ──
$source = "C:\Users\$env:USERNAME\Documents"
$dest = "D:\Sauvegardes"
$date = Get-Date
$jour = $date.Day
$mois = $date.Month
$annee = $date.Year
$dernierJour = [DateTime]::DaysInMonth($annee, $mois)
# ── Logique de type de sauvegarde ──
if ($mois -eq 12 -and $jour -eq 31) {
$type = "Totale"
$dossier = "$dest\Totale_$annee"
} elseif ($jour -eq $dernierJour) {
$type = "Differentielle"
$dossier = "$dest\Diff_${annee}_${mois}"
} else {
$type = "Incrementielle"
$dossier = "$dest\Incr_${annee}_${mois}_${jour}"
}
# ── Créer dossier destination ──
New-Item -ItemType Directory -Path $dossier -Force
# ── Copier les fichiers (Robocopy) ──
robocopy $source $dossier /E /COPYALL /LOG:"$dest\log_$type.txt"
Write-Host "✅ Sauvegarde $type effectuée → $dossier" -ForegroundColor Green
Planificateur de tâches — 20h00 quotidien
schtasks ou Task Scheduler GUI
# ── Via PowerShell — Créer la tâche planifiée ──
$action = New-ScheduledTaskAction \
-Execute "powershell.exe" \
-Argument "-File C:\Scripts\sauvegarde.ps1"
$trigger = New-ScheduledTaskTrigger \
-Daily -At "20:00"
Register-ScheduledTask \
-TaskName "Sauvegarde_Quotidienne" \
-Action $action \
-Trigger $trigger \
-RunLevel Highest \
-Force
Write-Host "✅ Tâche planifiée à 20h00 créée !" -ForegroundColor Green
# ── Via schtasks (cmd) ──
schtasks /create /tn "Sauvegarde" \
/tr "powershell -File C:\Scripts\sauvegarde.ps1" \
/sc daily /st 20:00
Via GUI : Rechercher "Planificateur de tâches" → Créer une tâche de base → Déclencheur : Tous les jours à 20h00 → Action : lancer le script .ps1
📊
Tableau de synthèse des sauvegardes
Quand, quoi, où
TypeQuandCopie quoi ?Dossier destinationAvantage
Totale 31 décembre TOUS les fichiers D:\Sauvegardes\Totale_2025 Restauration complète
Différentielle Fin de chaque mois Modifiés depuis la TOTALE D:\Sauvegardes\Diff_2025_11 Rapide, 1 seul support
Incrémentielle Chaque jour Modifiés depuis la DERNIÈRE sauvegarde D:\Sauvegardes\Incr_2025_11_15 Très rapide, économe
?
🧪 Auto-évaluation
Quiz de révision

16 questions sur PowerShell, utilisateurs, GPO, partage et sauvegarde.

0 / 0
Score actuel
🃏
Mémorisation
Flashcards PowerShell

Clique sur la carte pour voir la réponse.

Carte 1 / 12
❓ Question
✅ Réponse
1 / 12
Examen
Checklist — À ne pas oublier

Coche chaque tâche au fur et à mesure pendant l'examen.

0%
Progression