Logo Pastebin.fr
Pastebin

Retrouvez, créez et partagez vos snippets en temps réel.

T

# 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."

Créé il y a 2 mois.

Rechercher un Pastebin

Aucun paste trouvé.