@echo off
:: =====================================================================
:: Script d'optimisation - Windows Server 2022
:: A executer en tant qu'ADMINISTRATEUR
:: Lisez chaque section avant execution. Certaines actions sont
:: commentees (REM) car elles dependent du role du serveur.
:: Faites un point de restauration / snapshot AVANT execution.
:: =====================================================================

:: ---- Verification des droits administrateur ----
net session >nul 2>&1
if %errorLevel% NEQ 0 (
    echo [ERREUR] Ce script doit etre execute en tant qu'Administrateur.
    pause
    exit /b 1
)

set LOGFILE=%~dp0optimisation-log.txt
echo Debut de l'optimisation - %date% %time% > "%LOGFILE%"

echo =====================================================
echo   OPTIMISATION WINDOWS SERVER 2022
echo =====================================================
echo.

:: =====================================================================
:: 1. PLAN D'ALIMENTATION - Performances elevees
:: =====================================================================
echo [1/9] Configuration du plan d'alimentation...
powercfg /setactive SCHEME_MIN >> "%LOGFILE%" 2>&1
powercfg /change monitor-timeout-ac 0 >> "%LOGFILE%" 2>&1
powercfg /change standby-timeout-ac 0 >> "%LOGFILE%" 2>&1
powercfg /change hibernate-timeout-ac 0 >> "%LOGFILE%" 2>&1
powercfg /hibernate off >> "%LOGFILE%" 2>&1
echo    -> OK
echo.

:: =====================================================================
:: 2. EFFETS VISUELS - Ajuster pour les performances
:: =====================================================================
echo [2/9] Desactivation des effets visuels...
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects" /v VisualFXSetting /t REG_DWORD /d 2 /f >> "%LOGFILE%" 2>&1
echo    -> OK (effectif apres reconnexion utilisateur)
echo.

:: =====================================================================
:: 3. RESEAU - Optimisations generales
:: =====================================================================
echo [3/9] Optimisations reseau...

:: Desactive l'auto-tuning restrictif (a garder "normal" en general, ici ex. optionnel)
:: netsh int tcp set global autotuninglevel=normal

:: Active RSS (Receive Side Scaling)
netsh int tcp set global rss=enabled >> "%LOGFILE%" 2>&1

:: Desactive Chimney Offload (obsolete, recommande desactive sur serveurs modernes)
netsh int tcp set global chimney=disabled >> "%LOGFILE%" 2>&1

:: Desactive NetBIOS sur toutes les interfaces (DECOMMENTER si pas besoin de compatibilite legacy)
:: wmic nicconfig where TcpipNetbiosOptions=0 call SetTcpipNetbios 2

echo    -> OK
echo.

:: =====================================================================
:: 4. NETTOYAGE DISQUE ET SYSTEME
:: =====================================================================
echo [4/9] Nettoyage des fichiers temporaires...
del /q /f /s "%TEMP%\*" >nul 2>&1
del /q /f /s "C:\Windows\Temp\*" >nul 2>&1
echo    -> Fichiers temporaires supprimes
echo.

echo [5/9] Nettoyage des composants Windows (WinSxS)...
DISM /Online /Cleanup-Image /StartComponentCleanup /Quiet >> "%LOGFILE%" 2>&1
echo    -> OK
echo.

:: =====================================================================
:: 5. FICHIER D'ECHANGE (PAGEFILE) - Gestion manuelle
:: =====================================================================
echo [6/9] Configuration du fichier d'echange...
echo    NOTE : Ajustez la taille en fonction de votre RAM.
echo    Exemple ci-dessous fige a 4096-4096 Mo (a adapter) :
wmic computersystem where name="%COMPUTERNAME%" set AutomaticManagedPagefile=False >> "%LOGFILE%" 2>&1
:: DECOMMENTER et adapter les tailles (en Mo) selon votre RAM :
:: wmic pagefileset where name="C:\\pagefile.sys" set InitialSize=4096,MaximumSize=4096 >> "%LOGFILE%" 2>&1
echo    -> Gestion automatique desactivee (definissez une taille manuelle si besoin)
echo.

:: =====================================================================
:: 6. DEFRAGMENTATION / TRIM
:: =====================================================================
echo [7/9] Optimisation des disques (SSD TRIM / HDD defrag automatique selon type)...
defrag C: /O >> "%LOGFILE%" 2>&1
echo    -> OK
echo.

:: =====================================================================
:: 7. SERVICES NON ESSENTIELS (A ADAPTER SELON LE ROLE DU SERVEUR)
:: =====================================================================
echo [8/9] Desactivation de services optionnels...
echo    Les lignes ci-dessous sont COMMENTEES par securite.
echo    Decommentez uniquement les services dont vous etes sur de ne pas avoir besoin.

:: Service de Fax
:: sc config Fax start= disabled

:: Spouleur d'impression (UNIQUEMENT si ce n'est pas un serveur d'impression)
:: sc config Spooler start= disabled

:: Xbox related (rarement presents sur Server, mais parfois installes)
:: sc config XblAuthManager start= disabled
:: sc config XblGameSave start= disabled
:: sc config XboxNetApiSvc start= disabled

:: Windows Search (a garder actif si serveur de fichiers avec recherche)
:: sc config WSearch start= disabled

echo    -> Section revue (voir script pour activer manuellement)
echo.

:: =====================================================================
:: 8. STOCKAGE - Desactiver la derniere date d'acces (perf NTFS)
:: =====================================================================
echo [9/9] Desactivation du suivi de derniere date d'acces (NTFS)...
fsutil behavior set disablelastaccess 1 >> "%LOGFILE%" 2>&1
echo    -> OK
echo.

echo =====================================================
echo   OPTIMISATION TERMINEE
echo   Journal complet : %LOGFILE%
echo   Un REDEMARRAGE est recommande pour appliquer
echo   toutes les modifications.
echo =====================================================
echo.

echo Fin de l'optimisation - %date% %time% >> "%LOGFILE%"

pause
