# config_peda_applocker.ps1
# A lancer UNE FOIS en tant qu'administrateur local sur chaque PC
# Vérifier qu'on est bien admin
$principal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if (-not $principal.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
Write-Error "Merci de lancer ce script en tant qu'administrateur."
exit 1
}
Write-Host "=== Vérification de la dispo AppLocker ==="
if (-not (Get-Command New-AppLockerFileRule -ErrorAction SilentlyContinue)) {
Write-Error "AppLocker n'est pas disponible sur cette édition de Windows."
exit 1
}
Write-Host "=== Création / vérification des groupes locaux Eleves, Profs, AdminPedago ==="
function Ensure-LocalGroup {
param([string]$Name)
if (-not (Get-LocalGroup -Name $Name -ErrorAction SilentlyContinue)) {
Write-Host "Création du groupe $Name ..."
net localgroup "$Name" /add | Out-Null
} else {
Write-Host "Groupe déjà présent : $Name"
}
}
Ensure-LocalGroup "Eleves"
Ensure-LocalGroup "Profs"
Ensure-LocalGroup "AdminPedago"
Write-Host "`n=== Création / vérification des comptes eleve / prof (optionnel) ==="
function Ensure-LocalUser {
param(
[string]$UserName,
[string]$Password,
[string]$FullName,
[string]$GroupName
)
if (-not (Get-LocalUser -Name $UserName -ErrorAction SilentlyContinue)) {
Write-Host "Création du compte $UserName ..."
net user "$UserName" "$Password" /add /y /fullname:"$FullName" /passwordchg:no /passwordreq:yes | Out-Null
} else {
Write-Host "Compte déjà existant : $UserName"
}
Write-Host " - Ajout de $UserName dans $GroupName"
net localgroup "$GroupName" "$UserName" /add | Out-Null
Write-Host " - Ajout de $UserName dans Users"
net localgroup "Users" "$UserName" /add | Out-Null
}
# Tu peux commenter ces deux lignes si tu préfères gérer les comptes toi-même
Ensure-LocalUser -UserName "eleve" -Password "eleve" -FullName "Compte eleve" -GroupName "Eleves"
Ensure-LocalUser -UserName "prof" -Password "prof" -FullName "Compte prof" -GroupName "Profs"
Write-Host "`n=== Activation du service Application Identity (AppIDSvc) ==="
try {
Set-Service -Name "AppIDSvc" -StartupType Automatic -ErrorAction SilentlyContinue
Start-Service -Name "AppIDSvc" -ErrorAction SilentlyContinue
Write-Host "Service Application Identity démarré et en démarrage automatique."
}
catch {
Write-Warning "Impossible de démarrer ou configurer le service Application Identity : $_"
}
Write-Host "`n=== Création des règles AppLocker de blocage pour Eleves et Profs ==="
Import-Module AppLocker -ErrorAction SilentlyContinue
# EXE Windows à bloquer pour Eleves / Profs
$blockPaths = @(
"$env:WINDIR\System32\cmd.exe",
"$env:WINDIR\System32\WindowsPowerShell\v1.0\powershell.exe",
"$env:WINDIR\System32\WindowsPowerShell\v1.0\powershell_ise.exe",
"$env:WINDIR\regedit.exe",
"$env:WINDIR\System32\mmc.exe",
"$env:WINDIR\System32\taskmgr.exe",
"$env:WINDIR\System32\control.exe",
"$env:WINDIR\ImmersiveControlPanel\SystemSettings.exe"
)
$ruleObjects = @()
$localComputer = $env:COMPUTERNAME
$targetGroups = @(
"$localComputer\Eleves",
"$localComputer\Profs"
)
foreach ($path in $blockPaths) {
if (-not (Test-Path $path)) {
Write-Warning "Fichier introuvable, je saute : $path"
continue
}
foreach ($grp in $targetGroups) {
$groupNameOnly = $grp.Split('\')[-1]
if (-not (Get-LocalGroup -Name $groupNameOnly -ErrorAction SilentlyContinue)) {
Write-Warning "Groupe $groupNameOnly introuvable, je ne crée pas de règle pour lui."
continue
}
$ruleName = "Deny_$($groupNameOnly)_$([IO.Path]::GetFileName($path))"
Write-Host " - Règle DENY pour $groupNameOnly sur $path"
$rule = New-AppLockerFileRule -Name $ruleName `
-User $grp `
-Action Deny `
-FilePath $path `
-RuleType Exe
$ruleObjects += $rule
}
}
if ($ruleObjects.Count -eq 0) {
Write-Warning "Aucune règle n'a été créée (aucun fichier/groupe valide)."
} else {
# On MERGE avec la politique existante (on n'écrase pas ce qu'il y a déjà)
$policy = New-AppLockerPolicy -RuleObject $ruleObjects
Set-AppLockerPolicy -PolicyObject $policy -Merge -ErrorAction Stop
Write-Host "`nRègles AppLocker ajoutées (mode Merge)."
}
Write-Host "`n=== FIN DE CONFIG ==="
Write-Host "Les groupes Eleves et Profs ne pourront plus lancer : CMD, PowerShell, Regedit, MMC, Taskmgr, Panneau de config, Paramètres."
Write-Host "Les autres applis restent accessibles (aucun blocage global)."
Write-Host "Pense à redémarrer le PC pour que les règles AppLocker soient bien prises en compte."