Windows / AD

📚 Déploiement Postes Windows Linux Clonezilla Sysprep PowerShell

Clonezilla, Sysprep, Unattend.xml, PowerShell post-install, winget, preseed Debian — déployer et configurer des postes Windows et Linux efficacement.

ClonezillaSysprepUnattend.xmlPowerShellwingetPreseed DebianGLPI AgentChecklist

Méthodes de déploiement — Comparaison

MéthodeAvantageUsage typiqueComplexité
Clonezilla (image disque)Simple, rapide, sans infraPetits parcs, urgence, postes identiques
WinPE + Unattend.xmlLéger, personnalisable, sans serveurDéploiement silencieux, automatisé⭐⭐
MDT + WDS (Microsoft)Natif Windows, GPO intégrées, PXEEnvironnements Windows AD moyens⭐⭐⭐
Ansible / Scripts PowerShellAutomatisation post-installConfiguration logiciels sur parc existant⭐⭐
SCCM / IntuneIndustriel, 100+ postes, reportingGrandes entreprises⭐⭐⭐⭐

Clonezilla — Clonage et déploiement rapide

Clonezilla est l'outil de référence pour cloner un poste maître vers plusieurs postes identiques. Disponible en live USB, il supporte les images locales et distantes (SSH, Samba, NFS).

1
Préparer le poste maître
Installer Windows + tous les pilotes + logiciels standards de l'entreprise. S'assurer que tout fonctionne correctement.
2
Généraliser avec Sysprep
Exécuter sysprep /generalize /oobe /shutdown pour généraliser l'image : supprime le SID, le nom de machine et les comptes — le poste s'éteint automatiquement.
3
Capturer l'image avec Clonezilla
Booter sur Clonezilla live USB. Choisir device-image → save disk. Sauvegarder vers un NAS Samba, NFS ou clé USB externe.
4
Restaurer sur les nouveaux postes
Booter sur Clonezilla. Choisir device-image → restore disk. L'image est déployée en quelques minutes.
5
Post-déploiement Windows
Windows OOBE se lance automatiquement : configurer le nom du poste, joindre le domaine AD, lancer gpupdate /force.
sysprep-master.bat
@echo off
REM === Généralisation du poste maître avant capture Clonezilla ===
REM Fermer toutes les applications avant d'exécuter ce script

echo Préparation de l'image maître...
echo Sysprep va généraliser le poste et l'éteindre.
echo.
pause

REM Nettoyer avant sysprep
cleanmgr /sagerun:1
ipconfig /flushdns

REM Lancer sysprep (le poste s'éteint automatiquement)
C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /quiet

REM Capturer l'image avec Clonezilla depuis un live USB APRES l'extinction

Unattend.xml — Installation Windows automatique

Le fichier de réponses Unattend.xml automatise toutes les étapes de l'installation Windows : partitionnement, région, jointure de domaine, compte administrateur local.

unattend.xml
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">

  <!-- Phase WinPE : langue et partitionnement -->
  <settings pass="windowsPE">
    <component name="Microsoft-Windows-International-Core-WinPE">
      <UILanguage>fr-FR</UILanguage>
      <UserLocale>fr-FR</UserLocale>
      <KeyboardLayout>040c:0000040c</KeyboardLayout>
    </component>
  </settings>

  <!-- Phase spécialisation : nom, domaine -->
  <settings pass="specialize">
    <component name="Microsoft-Windows-Shell-Setup">
      <ComputerName>*</ComputerName>  <!-- * = nom généré -->
      <TimeZone>Romance Standard Time</TimeZone>
    </component>
    <component name="Microsoft-Windows-UnattendedJoin">
      <Identification>
        <Credentials>
          <Domain>ENTREPRISE.LOCAL</Domain>
          <Username>svc_join</Username>
          <Password>JoinP@ss!</Password>
        </Credentials>
        <JoinDomain>ENTREPRISE.LOCAL</JoinDomain>
        <MachineObjectOU>OU=Postes,DC=ENTREPRISE,DC=LOCAL</MachineObjectOU>
      </Identification>
    </component>
  </settings>

  <!-- Phase OOBE : compte local, bypass écrans -->
  <settings pass="oobeSystem">
    <component name="Microsoft-Windows-Shell-Setup">
      <OOBE>
        <HideEULAPage>true</HideEULAPage>
        <SkipUserOOBE>true</SkipUserOOBE>
        <SkipMachineOOBE>true</SkipMachineOOBE>
      </OOBE>
      <UserAccounts>
        <LocalAccounts>
          <LocalAccount wcm:action="add">
            <Name>Administrateur</Name>
            <Password><Value>LocalAdm!n2025</Value></Password>
            <Group>Administrators</Group>
          </LocalAccount>
        </LocalAccounts>
      </UserAccounts>
    </component>
  </settings>

</unattend>

Script PowerShell — Post-déploiement Windows

post-deploy.ps1
#Requires -RunAsAdministrator
# Script de post-déploiement Windows
# Exécuter depuis une clé USB ou un partage réseau \\srv-deploy\scripts\

param(
    [string]$NomPoste = "",
    [string]$Domaine  = "ENTREPRISE.LOCAL",
    [string]$OUPath   = "OU=Postes,OU=IT,DC=ENTREPRISE,DC=LOCAL"
)

function Log($msg) {
    Write-Host "[$(Get-Date -Format 'HH:mm:ss')] $msg" -ForegroundColor Cyan
}

# 1. Renommer le poste
if ($NomPoste -ne "") {
    Log "Renommage du poste en $NomPoste"
    Rename-Computer -NewName $NomPoste -Force
}

# 2. Fuseau horaire et synchronisation NTP
Log "Configuration fuseau horaire Europe/Paris"
Set-TimeZone -Id "Romance Standard Time"
w32tm /resync /force | Out-Null

# 3. Désactiver les services inutiles (Xbox, Fax...)
Log "Désactivation services inutiles"
@("XboxGipSvc","XblGameSave","XblAuthManager","XboxNetApiSvc","Fax","MapsBroker") | ForEach-Object {
    Stop-Service $_ -Force -ErrorAction SilentlyContinue
    Set-Service  $_ -StartupType Disabled -ErrorAction SilentlyContinue
}

# 4. Installer les logiciels standards via winget
Log "Installation des logiciels standards"
$apps = @(
    @{id="7zip.7zip";                   name="7-Zip"},
    @{id="Adobe.Acrobat.Reader.64-bit"; name="Adobe Reader"},
    @{id="Mozilla.Firefox.Fr";          name="Firefox FR"},
    @{id="VideoLAN.VLC";                name="VLC"},
    @{id="Microsoft.Teams";             name="Microsoft Teams"},
    @{id="Notepad++.Notepad++";         name="Notepad++"}
)
foreach ($app in $apps) {
    Log "  Installation : $($app.name)"
    winget install --id $app.id --silent --accept-source-agreements --accept-package-agreements 2>&1 | Out-Null
    Log "  $(if ($LASTEXITCODE -eq 0) {'✓ OK'} else {'✗ Erreur (code ' + $LASTEXITCODE + ')'})"
}

# 5. Activer le Bureau à distance (RDP)
Log "Activation RDP"
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" fDenyTSConnections 0
Enable-NetFirewallRule -DisplayGroup "Bureau à distance"

# 6. Installer l'agent GLPI (inventaire automatique)
Log "Installation GLPI Agent"
$glpiMsi = "\\srv-deploy\outils\glpi-agent-x64.msi"
if (Test-Path $glpiMsi) {
    msiexec /i $glpiMsi /quiet /norestart SERVER="http://glpi.entreprise.local/front/inventory.php" | Out-Null
    Log "  GLPI Agent installé"
}

# 7. Jonction au domaine AD
Log "Jonction au domaine $Domaine"
$cred = Get-Credential -Message "Compte de jonction (svc_join)"
Add-Computer -DomainName $Domaine -OUPath $OUPath -Credential $cred -Force

# 8. GPO
Log "Application des stratégies de groupe"
gpupdate /force | Out-Null

Log "=== Post-déploiement terminé. Redémarrage dans 30s ==="
Start-Sleep 30
Restart-Computer -Force

Installation silencieuse — Référence winget

LogicielID wingetCommande
7-Zip7zip.7zipwinget install 7zip.7zip --silent
Adobe ReaderAdobe.Acrobat.Reader.64-bitwinget install Adobe.Acrobat.Reader.64-bit --silent
Firefox FRMozilla.Firefox.Frwinget install Mozilla.Firefox.Fr --silent
VLCVideoLAN.VLCwinget install VideoLAN.VLC --silent
ChromeGoogle.Chromewinget install Google.Chrome --silent
TeamsMicrosoft.Teamswinget install Microsoft.Teams --silent
Notepad++Notepad++.Notepad++winget install Notepad++.Notepad++ --silent
GitGit.Gitwinget install Git.Git --silent
VS CodeMicrosoft.VisualStudioCodewinget install Microsoft.VisualStudioCode --silent

Déploiement Linux — Preseed Debian

preseed-debian.cfg
# Fichier preseed pour installation Debian 12 automatique
# Placer dans /var/www/html/preseed/ sur le serveur HTTP

# Localisation
d-i debian-installer/locale string fr_FR
d-i keyboard-configuration/xkb-keymap select fr

# Réseau (DHCP automatique)
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string poste-debian
d-i netcfg/get_domain string entreprise.local

# Horloge
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Paris
d-i clock-setup/ntp boolean true

# Partitionnement automatique LVM
d-i partman-auto/method string lvm
d-i partman-auto/disk string /dev/sda
d-i partman-auto-lvm/guided_size string max
d-i partman-auto/choose_recipe select atomic
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

# Compte utilisateur
d-i passwd/root-login boolean false
d-i passwd/user-fullname string Technicien IT
d-i passwd/username string tech
d-i passwd/user-password password TechPass2025!
d-i passwd/user-password-again password TechPass2025!
d-i passwd/user-default-groups string sudo

# Sélection des paquets
tasksel tasksel/first multiselect standard
d-i pkgsel/include string openssh-server curl wget vim git sudo htop

# Script post-install (configuration finale)
d-i preseed/late_command string \
  in-target apt-get install -y curl wget sudo openssh-server; \
  in-target systemctl enable ssh; \
  echo "tech ALL=(ALL) NOPASSWD:ALL" >> /target/etc/sudoers.d/tech

Checklist déploiement — Livraison poste

#ÉtapeVérification
1MatérielNo série noté, état physique OK, accessoires vérifiés
2BIOS/UEFISecure Boot activé, date/heure correctes
3OS installéWindows/Linux installé, licence activée
4PilotesRéseau, affichage, audio tous fonctionnels
5Mises à jourWindows Update ou apt upgrade — tout à jour
6AntivirusAgent AV installé, à jour, premier scan OK
7Domaine ADPoste joint au domaine, dans la bonne OU, GPO appliquées
8LogicielsSuite Office, navigateur, logiciels métier installés
9GLPI AgentPoste visible dans GLPI avec inventaire matériel/logiciel
10SupervisionAgent Zabbix installé, poste visible et supervisé
11RDPBureau à distance fonctionnel (si requis)
12Test utilisateurConnexion avec le compte de l'utilisateur final testée
13ÉtiquetteÉtiquette inventaire posée (no série + nom réseau)
14PV de remiseDocument signé, utilisateur informé des spécificités
💡
Utiliser GLPI Agent pour automatiser l'inventaire dès le premier démarrage. Couplé à GLPI, il remonte automatiquement : CPU, RAM, disque, OS, logiciels installés, numéro de série et adresse MAC — sans aucune saisie manuelle.
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google