05 Jan 2022, 00:00

Autoriser l'accès à un partage réseau sans authentification depuis Windows Server 2019

Depuis Windows Server 2019, l’accès aux dossiers partagés (sur un autre serveur) qui ne nécessitent pas d’authentification est désactivé.
Pour le réactiver, il faut aller dans gpedit.msc, et aller dans Configuration ordinateur -> Modèles d'administration -> Réseau -> Station de travail LANMAN et activer le paramètre Activer les ouvertures de session invité non sécurisées.

Probablement faisable via gpmc.msc dans le cas d’un domaine.

Source

Possible via regedit aussi ?

15 Oct 2021, 00:00

Invite de commande Windows

Affecter une variable (y compris avec espaces)

set "myvar=string or something else"
Si on met les guillemets juste autour du contenu à affecter, les guillemets feront partie du contenu de la variable !

Appeler un script depuis un script :

CALL path\to\script.bat
(attend la fin de l’éxecution du script appelé avant de continuer le script principal)

Ajouter une pause

Si on veut attendre un certain nombre de secondes (ici 5) :
timeout 5

Si on veut une interaction de l’utilisateur :
timeout -1
On peut également utiliser
pause
mais dans certains cas, cela ne fonctionne pas dans les scripts.

Création de fichier .bat contenant des accents

Éditer le fichier avec Notepad++, et choisir dans le menu Encodage -> Codage de caractères -> Langues d'Europe occidentale -> OEM 850. Si les accents avaient été entrés avant la conversion, ils ont été remplacés par d’autres caractères, il faut donc les réécrire correctement.

Split d’une commande sur plusieurs lignes pour la lisibilité

Il faut échapper le retour à la ligne par un circonflexe ^ . Il semble qu’il faille faire commencer la ligne suivante par un espace, car le premier caractère ne sera pas pris en compte (non vérifié).

goto

goto :label

:label
echo "This is label"

Fin du label ???

14 Sep 2021, 00:00

Création d'un ISO Windows personnalisé

2 sources qui m’ont aidé :
https://theitbros.com/sysprep-windows-machine/
https://www.ac-nantes.fr/medias/fichier/procedure-image-de-reference-multiplateforme_1433950335218-pdf

Entrer en mode d’audit

Sur une install, rentrer en mode audit :

c:\Windows\System32\sysprep\sysprep.exe /audit

ou Ctrl-Maj-F3 sur l’écran de choix de langue lors de l’OOBE (configuration du hostname, utilisteur etc…)

Ceci redémarre sur une session Administrateur. Sur la fenetre qui s’ouvre, faire Cancel pour personnaliser l’image.

Personnalisation de l’image

  • Install/update des pilotes (si c’est la même machine que la destination)
  • install des logiciels souhaités (navigateur, ccleaner, vlc etc…)
  • Télémetrie :
sc delete DiagTrack
sc delete dmwappushservice
echo ““ > C:\ProgramData\Microsoft\Diagnosis\ETLLogs\AutoLogger\AutoLogger-DiagTrack-Listener.etl
reg add “HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection” /v AllowTelemtery /t REG_DWORD /d 0 /f

et DisableWinTracking

  • Remove buit-in apps (powershell)
Get-AppxPackage *3dbuilder* | Remove-AppxPackage
Get-AppxPackage *windowsalarms* | Remove-AppxPackage
Get-AppxPackage *windowscommunicationsapps* | Remove-AppxPackage
Get-AppxPackage *officehub* | Remove-AppxPackage
Get-AppxPackage *skypeapp* | Remove-AppxPackage
Get-AppxPackage *getstarted* | Remove-AppxPackage
Get-AppxPackage *zunemusic* | Remove-AppxPackage
Get-AppxPackage *windowsmaps* | Remove-AppxPackage
Get-AppxPackage *solitairecollection* | Remove-AppxPackage
Get-AppxPackage *bingfinance* | Remove-AppxPackage
Get-AppxPackage *zunevideo* | Remove-AppxPackage
Get-AppxPackage *bingnews* | Remove-AppxPackage
Get-AppxPackage *onenote* | Remove-AppxPackage
Get-AppxPackage *people* | Remove-AppxPackage
Get-AppxPackage *windowsphone* | Remove-AppxPackage
Get-AppxPackage *bingsports* | Remove-AppxPackage
Get-AppxPackage *bingweather* | Remove-AppxPackage
Get-AppxPackage *xbox* | Remove-AppxPackage
Get-AppxPackage *yourphone* | Remove-AppxPackage
Get-AppxPackage *feedback* | Remove-AppxPackage
Get-AppxPackage *microsoft.wallet* | Remove-AppxPackage
Get-AppxPackage *spotify* | Remove-AppxPackage
C:\Windows\SysWOW64\OneDriveSetup.exe /uninstall
  • Chocolatey pour install office
    choco install office365business

Création de l’image

Exécuter : sysprep
Enter OOBE ; Generalize ; Shutdown
Ceci permet de définir l’action au prochain démarrage du système (rentrer en mode OOBE pour paramétrage des users etc), de généraliser l’image (enlever toutes les informations/pilotes spécifiques au matériel utilisé), et demande à redémarrer immédiatement.

Nous avons donc une installation contenant les logiciels et personnalisations nécessaires, sans information de matériel ou d’utilisateurs, qui rentrera en mode OOBE à son prochain démarrage.
Il faut maintenant créér une image pour pouvoir installer cette image. Pour ceci :

Brancher le disque sur une installation fonctionnelle de Windows. Si aucune disponible, ceci peut se faire depuis le DVD d’install de Windows (Réparer l’ordi -> invite de commande).
Entrer en ligne de commande ; vérifier la lettre du lecteur systeme (par exemple avec diskpart > list vol). Ici c’est D:. Puis lancer :

dism /capture-image /imagefile:D:\win10custom.wim /capturedir:d:\ /name:"Win10 Pro Custom Edition"

À la fin de l’opération, on a un fichier win10custom.wim, qui peut se substituer au fichier install.wim d’une install classique (en le renommant install.wim)

Si besoin, splitter l’image :
Dism /Split-Image /ImageFile:D:\win10custom.wim /SWMFile:D:\win10custom.swm /FileSize:3900

Problèmes

En cas message erreur après sysprep (cant complete installation) ; ce problème vient du fait que le compte Administrateur utilisé pour le mode audit a un mot de passe vide, ce qui est contraire aux exigences de sécurité. Pour le régler :
https://www.urtech.ca/2015/12/solved-windows-could-not-complete-the-installation-windows-10-sysprep/
Maj-F10 -> secpol.msc puis Accout policy -> Password policy -> longueur minimale 0
ou bien on peut changer le mot de passe du compte admin :
Maj-F10 -> net user Administrateur Password1234.
On peut par la suite supprimer ce mot de passe avec la commande
net user Administrateur * puis en validant 2 fois un mdp vide.

Si on a une erreur à la généralisation, on peut vérifier pourquoi dans le log C:\Windows\System32\Sysprep\Panther\setupact.log.
Si c’est une erreur du type Package 123123123.Blablabla_version_editor was installed for a user, but not provisionned for all users, il faut le supprimer. Pour ceci, on vérifie qu’il est trouvé :
get-appxpackage -alluser *Blablabla*
S’il est bien trouvé, on le supprime avec :
get-appxpackage -allusers *Blablabla* | remove-appxpackage -allusers

Il est possible que Windows retourne l’erreur “Windows n’a pas pu valider votre installation”. Vérifier l’état de Bitlocker avec manage-bde -status. Il faut désactiver bitlocker pour pouvoir généraliser l’image. pour ceci, sous Powershell : Disable-Bitlocker –MountPoint ‘C:'.
https://theitbros.com/sysprep-was-not-able-to-validate-your-windows-installation/

Sortir du mode Audit

Si on souhaite sortir du mode Audit, il faut entrer la commande sysprep et choisir “Enter OOBE”. On aura l’obligation de créer un nouvel utilisateur admin, mais les utilisateurs existants ne sont pas affectés. On peut ensuite se logger avec un ancien utilisateur et suprimer l’utilisateur nouvellement créé.

07 Jun 2021, 00:00

Envoi d'un mail d'avertissement lorsque le mot passe AD est proche de l'expiration

Préambule

Le but est d’avertir les utilisateurs d’un domaine Active Directory lorsque leur mot de passe est proche de l’expiration, pour leur permettre de le renouveler avant l’expiration.

Le renouvellemnt se fait sans problème lorsque l’on est connecté directement au réseau, mais dans le cas d’un accès via OpenVPN avec authentification auprès de l’AD, la connexion VPN sera bloquée lorsque le mot de passe est expiré. D’où la procédure ici-présente.

Stockage du mot de passe de manière chiffrée

Source

Le but, si je comprends bien, est d’enregistrer une empreinte du mot de passe (ou le mot de passe chiffré) dans un fichier, pour qu’il soit utilisable sans interaction humaine, sans pour autant être exposé en clair sur le disque.

Le fichier obtenu sera spécifique à ce compte utilisateur, et cette machine. Il devra être recréé si l’opération doit être effectuée depuis un autre compte, ou le même compte sur une autre machine.

Lancer powershell, puis les commandes suivantes (adapter le chemin de fichier si besoin) :

$credential = Get-Credential # entrer identifiant et mot de passe à conserver
$credential.Password | ConvertFrom-SecureString | Set-Content D:\encrypted_password.txt

Le fichier D:\encrypted_password.txt contient le hash qui nous intéresse.

À noter que ceci a été réalisé en utilisant un utilisateur qui possède une licence valide auprès d’Office 365. Non testé auprès d’autres fournisseurs SMTP.

Script pour générer et envoyer les mails

Il s’agit du script de Robert Pearman que j’ai légèrement modifié, et francisé.

Le script en question, qui doit être enregistré avec l’extension .ps1 (penser à modifier les variables de début de script) :

#################################################################################################################
#
# Version 1.4 February 2016
# Robert Pearman (WSSMB MVP)
# TitleRequired.com
# Script to Automated Email Reminders when Users Passwords due to Expire.
#
# Requires: Windows PowerShell Module for Active Directory
#
# For assistance and ideas, visit the TechNet Gallery Q&A Page. http://gallery.technet.microsoft.com/Password-Expiry-Email-177c3e27/view/Discussions#content
# Or Checkout my Youtube Channel - https://www.youtube.com/user/robtitlerequired
#
##################################################################################################################
# Please Configure the following variables....

$smtpServer="smtp.office365.com"
$expireindays = 14
$mailfrom = "expediteur@example.com"
$passwordFile = "D:\encrypted_password.txt"
$from = "Mot de passe <$mailfrom>"

$logging = "Enabled" # Set to Disabled to Disable Logging
$logFile = "C:\log_mail.csv" # ie. c:\mylog.csv

$testing = "Enabled" # Set to Disabled to Email Users
$testRecipient = "debug@example.com"

#
###################################################################################################################


# Force TLS1.2
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

# get password from file
$encryptedPassword = Get-Content $passwordFile | ConvertTo-SecureString
$Credential = New-Object System.Management.Automation.PsCredential($mailfrom, $encryptedPassword)

# Check Logging Settings
if (($logging) -eq "Enabled")
{
    # Test Log File Path
    $logfilePath = (Test-Path $logFile)
    if (($logFilePath) -ne "True")
    {
        # Create CSV File and Headers
        New-Item $logfile -ItemType File
        Add-Content $logfile "Date,Name,EmailAddress,DaystoExpire,ExpiresOn,Notified"
    }
} # End Logging Check

# System Settings
$textEncoding = [System.Text.Encoding]::UTF8
$date = Get-Date -format ddMMyyyy
# End System Settings

# Get Users From AD who are Enabled, Passwords Expire and are Not Currently Expired
Import-Module ActiveDirectory
$users = get-aduser -filter * -properties Name, PasswordNeverExpires, PasswordExpired, PasswordLastSet, EmailAddress |where {$_.Enabled -eq "True"} | where { $_.PasswordNeverExpires -eq $false } | where { $_.passwordexpired -eq $false }
$DefaultmaxPasswordAge = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge

# Process Each User for Password Expiry
foreach ($user in $users)
{
    $Name = $user.Name
    $emailaddress = $user.emailaddress
    $passwordSetDate = $user.PasswordLastSet
    $PasswordPol = (Get-AduserResultantPasswordPolicy $user)
    $sent = "" # Reset Sent Flag
    # Check for Fine Grained Password
    if (($PasswordPol) -ne $null)
    {
        $maxPasswordAge = ($PasswordPol).MaxPasswordAge
    }
    else
    {
        # No FGP set to Domain Default
        $maxPasswordAge = $DefaultmaxPasswordAge
    }


    $expireson = $passwordsetdate + $maxPasswordAge
    $today = (get-date)
    $daystoexpire = (New-TimeSpan -Start $today -End $Expireson).Days

    # Set Greeting based on Number of Days to Expiry.

    # Check Number of Days to Expiry
    $messageDays = $daystoexpire

    if (($messageDays) -gt "1")
    {
        $messageDays = "dans " + "$daystoexpire" + " jours."
    }
    else
    {
        $messageDays = "aujourd'hui."
    }

    # Email Subject Set Here
    $subject="Votre mot de passe ESCDA expire $messageDays"

    # Email Body Set Here, Note You can use HTML, including Images.
    $body ="
    $name,
    <p> Votre mot de passe va expirer $messageDays<br>
    Pour changer votre mot de passe, appuyer sur Ctrl+Alt+Suppr et choisir Modifier un mot de passe <br>
    <p>Merci, <br>
    </P>"


    # If Testing Is Enabled - Email Administrator
    if (($testing) -eq "Enabled")
    {
        $emailaddress = $testRecipient
    } # End Testing

    # If a user has no email address listed
    if (($emailaddress) -eq $null)
    {
        $emailaddress = $testRecipient
    }# End No Valid Email

    # Send Email Message
    if (($daystoexpire -ge "0") -and ($daystoexpire -lt $expireindays))
    {
        $sent = "Yes"
        # If Logging is Enabled Log Details
        if (($logging) -eq "Enabled")
        {
            Add-Content $logfile "$date,$Name,$emailaddress,$daystoExpire,$expireson,$sent"
        }
        # Send Email Message
        Send-Mailmessage -Credential $Credential -smtpServer $smtpServer -from $from -to $emailaddress -Port "587" -useSsl -subject $subject -body $body -bodyasHTML -priority High -Encoding $textEncoding

    } # End Send Message
    else # Log Non Expiring Password
    {
        $sent = "No"
        # If Logging is Enabled Log Details
        if (($logging) -eq "Enabled")
        {
            Add-Content $logfile "$date,$Name,$emailaddress,$daystoExpire,$expireson,$sent"
        }
    }

} # End User Processing


# End

Ce script va parcourir les utilisateurs et isoler chaque utilisateur dont le mot de passe :

  • possède une date d’expiration
  • n’est pas encore expiré

et pour chacun d’eux, envoie un mail à l’adresse mail spécifiée dans leur profil AD, ou à l’adresse “$testRecipient” si aucune adresse n’est spécifiée.
(Note : en l’état, le script est en mode de test, et n’écrit donc qu’à l’adresse $testRecipient. pour activer l’envoi réel des mails aux utilisateurs, il faut passer $testing à Disabled dans les variables de début de script)

On retrouve la liste des utilisateurs traités (que leur adresse expire bientôt ou non) dans le fichier de log, par défaut C:\log_mail.csv. Ceci peut se désactiver en passant $logging à Disabled.

Tâche planifiée

Enfin, il faut activer l’éxécution automatique de ce script. Pour ceci, dans taskschd.msc, créer une tâche de base, mettre en programme/script powershell et en argument -windowstyle hidden -File "C:\chemin\vers\le\script\password_notification.ps1"

Lister les dates d’expiration de mot de passe

En powershell :
get-aduser -filter * -properties passwordlastset, passwordneverexpires |ft Name, passwordlastset, Passwordneverexpires

Source

09 Sep 2020, 00:00

Généralités sur les GPO

Généralités

La GPO est présente dans “Objets de Stratégies de groupe”. Elle n’y a aucun effet.

Elle doit être liée à un objet, qui peut être le Local system, un Domaine, un Site ou une OU (unité d’organisation).
Une fois liée, elle s’applique à cet objet, et tout ce qu’il contient.
On peut laisser le lien en place, mais le désactiver, via clic-droit sur le lien. ATTENTION, il s’agit de la notion de “Lien activé”, et non la notion d'“Appliquer” (qui est là pour forcer l’application de la GPO à la descendance).
Il est possible de désactiver les paramètres ordinateur et/ou utilisateurs d’une GPO.
Cela vaut le coup, après modification d’un GPO, d’attendre ~ une minute avant de faire gpupdate /force sur les clients, le temps qu’elle soit bien prise en compte et synchronisée sur les différents PDC.

Priorité et héritage

Les GPO sont appliquées dans l’ordre suivant, avec priorité à la dernière occurence :

  1. Local
  2. Site
  3. Domaine
  4. OU

Il est possible de bloquer l’héritage, ce qui bloque l’héritage reçu et non l’héritage légué.
On peut également “Appliquer” (Enforced) un lien vers une GPO. Ceci aura pour effet que cette GPO ne pourra pas être outrepassée par une GPO dans une OU descendant de celle-ci, et l’héritage sera forcé vers les descendants, même si ceux-ci le bloquent.

Groupes, OUs, Ordinateurs

La gestion des OUs et de leurs membres se fait dans Utilisateurs et Ordinateurs Active Directory. Les ordinateurs sont présents, en tant qu’objet Ordinateur, dans la catégorie Computers, mais également en tant que Groupe de sécurité “Ordinateurs du domaine” (donc dans la catégorie Users).
On peut sortir un ordinateur de la catégorie Computer, par exemple pour le mettre dans une OU, il restera par défaut dans le groupe “Ordinateurs du domaine”. Ceci permet de l’inclure quand même via les filtres de sécurité.

Lorsqu’on applique un filtre de sécurité, pour déterminer les (sous-)objets auxquels s’appliquer la GPO, ce sont des objets de type utilisateur, groupe, ordinateur, mais PAS des OU.
Les objets hors de ce filtre de sécurité n’ont, semble-t-il, pas le droit de lecture sur la GPO, donc impossibilité de l’appliquer.
Il me semble que cette mécanique empêche un compte hors du domaine (par exemple l’administrateur local d’un poste joint au domaine) d’appliquer quelque GPO que ce soit.

Lorsqu’une GPO est liée au domaine lui-même, elle concerne tous les objets du domaine, dont le groupe “Utilisateurs du domaine” et le groupe “Ordinateur du domaine”. Les paramètres utilisateurs et ordinateurs s’appliquent donc.
Toutefois, si on crée une OU SPECIAL_COMPUTER et une OU SPECIAL_USER, dans lesquelles on glisse respectivement un ordinateur, et un utilisateur, et que l’on lie une même GPO à ces 2 OUs, seuls les paramètres ordinateur s’appliqueront à la l’OU SPECIAL_COMPUTER et seuls les paramètres utilisateur s’appliqueront à l’OU SPECIAL_USER.

Il est possible de configurer un Loopback Processing Mode : on crée une GPO avec des règles utilisateurs, et on la lie à une unité contenant des ordinateurs. Avec l’activation du loopback, les stratégies utilisateurs s’appliquent aux utilisateurs loggés sur ces ordinateurs.
Pour ceci : modifier la GPO qui doit s’appliquer aux utilisateurs, et aller dans Config ordinateur / Stratégies / Modèles d'administration / Système / Stratégie de groupe et activer “Configurer le mode de traitement par bouclage de la stratégie de groupe utilisateur”.
La différence entre Remplacer et Fusionner est décrite dans le cadre de droite.
Si les Modèles d’administration sont absents, il faut les ajouter.

Diagnostic des GPO qui ne s’appliquent pas

  • La GPO est-elle liée à l’objet désiré ? Directement ou via héritage ?
  • Le lien est-il activé ?
  • Des paramètres utilisateurs et/ou ordinateurs sont-ils désactivés ?
  • Le filtrage de sécurité donne-t-il les autorisations de lecture à l’objet qui doit les appliquer ?
  • Est-elle outrepassée par une autre GPO avec une priorité plus élevée ?
  • Pour les installations de logiciel, ceci se produit avant l’ouverture de la session ; l’emplacement du fichier doit donc être accessible en lecture par le groupe “Ordinateurs du domaine”
  • Pour les déploiements d’imprimante, il faut généralement déco/reco la session

http://woshub.com/group-policy-not-applied-troubleshooting/

01 Dec 2019, 00:00

Réinitialiser la prise en compte du TPM par Windows

Suite à un changement de carte-mère, et donc à un remplacement de la puce TPM dedans, il peut arriver d’avoir des messages d’erreur (notamment 0x80090016) à l’ouverture de session Windows, ou Outlook (ou autre ?).

Ceci semble lié au fait que les infos d’identification étaient chiffrées grâce à un jeu de clés situé matériellement dans la puce TPM.
Pour corriger ceci, il faut renommer le dossier

C:\users\%username%\AppData\Local\Packages\Microsoft.AAD.BrokerPlugin_cw5n1h2txyewy

en .OLD (ou le supprimer…). Puis fermer la session.

Les infos d’identification seront redemandées au prochain lancement de la session ou de l’appli (et, je suppose, chiffrées grace au nouveau jeu de clés de la nouvelle puce).

Source

Il semble que dans certains cas (visiblement en lien avec la protection par code PIN), la solution soit plutôt (ou aussi ?) de supprimer le contenu du dossier

C:\Windows\ServiceProfiles\LocalService\AppData\Local\Microsoft\Ngc\

07 Oct 2019, 00:00

100% CPU pris par lsass quand Chrome lancé

Dans le cas où, au lancement de Chrome, le processus lsass.exe s’emballe jusqu’à prendre 100% d’un coeur, ça peut être dû à une installation d’extension qui n’aboutit jamais.

Essayer de supprimer 2 fois le dossier %appdata%\Microsoft\Protect\GUID.

28 Sep 2019, 00:00

Gestion des GPO et ajout de fichiers ADMX

gpedit.msc sert uniquement à modifier les stratégies de groupes locales. La commande est disponible sur les Windows standards (Pro en tout cas).
gpmc.mmc sert à modifier, sur un controlleur de domaine, les GPO qui seront déployées chez les clients via Active Directory. Si cette commande n’est pas disponible sur un serveur, c’est probablement que le rôle de gestion des stratégies de groupes n’a pas été installé (ajouter des fonctionnalités -> Gestion des stratégies de groupe).

Par défaut, toutes les GPO ne sont pas disponibles dans l’outil gpmc.msc. Notamment, la catégorie “Modèles d’aministration”. Or, si on lance gpedit.msc, on voit que beaucoup de stratégies sont disponibles sous cette catégorie.

Pour ajouter des stratégies à l’outil gpmc.msc, on utilise des fichiers ADMX (ou, historiquement, ADM). Ils sont généralement déployés via les mises à jour Windows, mais ne sont disponibles que pour le système local. On les trouve dans le dossier %windir%\PolicyDefinitions, sous la forme de fichiers ADMX associés à des fichiers de localisation ADML dans des répertoires de langue (par exemple fr-FR).
On peut prendre tous ces fichiers, et les copier dans le dossier %windir%\SYSVOL\sysvol\mon.domaine.fr\Policies\PolicyDefinitions

27 Sep 2019, 00:00

FQDN d'un controlleur de domaine dans une mauvaise zone de sécurité d'Explorer

Description du problème chez Microsoft Tuto pour l’activation par GPO

Dans certains cas, lorsque l’on est dans un domaine, et que l’on cherche à accéder à un serveur via son nom complet(FQDN, du type server.domain.example.com), alors le poste considérera que ce domaine appartient à la zone de confiance “internet”, et donc bloquera l’ouverture de certains documents, scripts, exécutables etc.
Pour corriger ce problème, on peut aller dans les options internet du poste en question, et passer les sites *.domain.example.com en zone Intranet.

Mais on peut aussi déployer ceci sur tous les postes du domaine, via GPO, ce qui évite d’avoir à le faire à la main sur chaque poste. Pour ceci, sur un controlleur de domaine :

  • S’assurer que les ficheirs ADMX ont été installés
  • gpmc.msc
  • Configuration utilisateur -> Stratégies -> Modèles d'administration -> Composants Windows -> Internet Explorer -> Panneau de configuration Internet -> Onglet Sécurité et activer le paramètre Liste des attributions de site aux zones Lorsqu’on rentre dans les propriétés du paramètre, on peut afficher les zones, et associer *.domaine.example.com à la valeur 1.
    (1 : zone intranet ; 2 : sites de confiance ; 3 : internet ; 4 : sites ensibles)

03 Jul 2019, 00:00

Test

Titre 1

Titre 2

Titre 3

Titre 4

Titre 5
Titre 6

Elément en italique
Élément en italique aussi (étoiles)
Élement en gras

Lien html