4.4 : Utilisateurs et groupes locaux

Sophie vous confie un poste fraîchement installé : « Avant même de penser à l’Active Directory — on y viendra en section 6 — chaque machine Windows a ses propres comptes et groupes locaux. C’est souvent la première chose à automatiser sur un nouveau poste ou un petit serveur isolé. »

Précision importante, dans la continuité de la leçon 1.3 : ces cmdlets (*-LocalUser, *-LocalGroup) sont spécifiques à Windows et n’existent pas sous Linux/macOS, qui ont leurs propres mécanismes de gestion des comptes (useradd, usermod…), en dehors du périmètre de cette formation.

Lister les comptes et groupes locaux

Get-LocalUser
Get-LocalGroup

Cibler un compte précis :

Get-LocalUser -Name "j.dupont"

Créer un utilisateur local

$motDePasse = Read-Host "Mot de passe du nouveau compte" -AsSecureString

New-LocalUser -Name "j.dupont" -Password $motDePasse -FullName "Julie Dupont" -Description "Stagiaire IT - Nordika"

On retrouve ici Read-Host -AsSecureString, vu en leçon 3.4 : jamais de mot de passe en clair dans un script, même pour un simple test.

Modifier ou désactiver un compte

Set-LocalUser -Name "j.dupont" -Description "Stagiaire IT - Nordika (contrat terminé)"
Disable-LocalUser -Name "j.dupont"

Disable-LocalUser est presque toujours préférable à une suppression : le compte est bloqué, mais reste consultable en cas de besoin (audit, restauration) — une bonne pratique qu’on retrouvera en section 9 sur la sécurité.

Supprimer un compte

Remove-LocalUser -Name "j.dupont"

Comme pour Remove-Item en 4.2, cette action est définitive : le réflexe -WhatIf reste valable ici aussi.

Gérer les groupes locaux

Créer un groupe :

New-LocalGroup -Name "Nordika-Stagiaires" -Description "Comptes stagiaires à accès restreint"

Ajouter un utilisateur à un groupe (par exemple, le groupe Administrateurs intégré à Windows) :

Add-LocalGroupMember -Group "Administrateurs" -Member "j.dupont"

Lister les membres d’un groupe :

Get-LocalGroupMember -Group "Nordika-Stagiaires"

Retirer un membre :

Remove-LocalGroupMember -Group "Nordika-Stagiaires" -Member "j.dupont"

Un exemple concret Nordika

$nouveauCompte = "j.dupont"
$motDePasse = Read-Host "Mot de passe pour $nouveauCompte" -AsSecureString

if (-not (Get-LocalUser -Name $nouveauCompte -ErrorAction SilentlyContinue)) {
    New-LocalUser -Name $nouveauCompte -Password $motDePasse -FullName "Julie Dupont"
    Add-LocalGroupMember -Group "Nordika-Stagiaires" -Member $nouveauCompte
    Write-Output "Compte $nouveauCompte créé et ajouté au groupe Stagiaires"
} else {
    Write-Warning "Le compte $nouveauCompte existe déjà"
}

(-ErrorAction SilentlyContinue sera détaillé en section 5 — il évite ici qu’une erreur s’affiche si le compte n’existe pas encore, ce qui est le comportement normal attendu par Get-LocalUser dans ce test.)

Ce que vous venez de faire à l’échelle d’un seul poste avec New-LocalUser est exactement la même logique qu’on automatisera à l’échelle de toute l’entreprise en section 6, avec le module ActiveDirectory et un import CSV pour créer des centaines de comptes d’un coup.

Dans la prochaine leçon, on termine cette exploration système avec un lecteur déjà entrevu en 4.1 : le Registre Windows.