Gérer les permissions NTFS avec PowerShell sur Windows 11/10
Sous Windows 11/10, les fichiers et dossiers stockés sur un disque NTFS possèdent des autorisations (ACL) qui définissent précisément quels utilisateurs peuvent lire, modifier ou supprimer leur contenu.
Si ces permissions peuvent être configurées via l’interface graphique, PowerShell permet d’aller beaucoup plus loin :
afficher, modifier et automatiser la gestion des droits d’accès à grande échelle.
Grâce aux cmdlets Get-Acl et Set-Acl, vous pouvez :
- afficher les permissions d’un dossier ou d’un fichier,
- ajouter ou retirer des autorisations,
- appliquer les mêmes règles à plusieurs répertoires,
- et même changer le propriétaire d’un dossier bloqué.
Cette approche est particulièrement utile pour les administrateurs ou utilisateurs avancés souhaitant :
- automatiser la gestion des droits sur un serveur ou un poste multi-utilisateurs,
- corriger des problèmes d’accès (“Accès refusé”) sans interface graphique,
- ou déployer des permissions identiques sur plusieurs répertoires partagés.
Gérer les permissions avec PowerShell
Lister les permissions NTFS (Get-Acl)
Pour afficher la liste complète des autorisations appliquées à un dossier ou fichier :
Get-Acl "C:\Dossier"
Cette commande affiche les ACL (Access Control List) associées à l’élément.
Pour un affichage plus lisible :
Get-Acl "C:\Dossier" | Format-List
Exemple de sortie :
Path : Microsoft.PowerShell.Core\FileSystem::C:\Users\maill
Owner : NT-AUTORITÄT\SYSTEM
Group : NT-AUTORITÄT\SYSTEM
Access : NT-AUTORITÄT\SYSTEM Allow FullControl
VORDEFINIERT\Administratoren Allow FullControl
hp-MAC\maill Allow FullControl
S-1-15-3-65536-599108337-2355189375-1353122160-3480128286-3345335107-485756383-4087318168-230526575 Allow
ExecuteFile, Synchronize
Audit :
Sddl : O:SYG:SYD:P(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;S-1-5-21-2373467495-3460344319-1749951908-1001)(A;;0x1
00020;;;S-1-15-3-65536-599108337-2355189375-1353122160-3480128286-3345335107-485756383-4087318168-230526575)

Ajouter une autorisation (AddAccessRule)
Pour accorder une permission spécifique à un utilisateur ou groupe, utilisez Set-Acl avec une nouvelle règle d’accès.
Exemple : donner le Contrôle total à l’utilisateur Paul sur le dossier C:\Partage
$acl = Get-Acl "C:\Partage"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Paul","FullControl","Allow")
$acl.AddAccessRule($rule)
Set-Acl "C:\Partage" $acl
Explications :
- Get-Acl → récupère les permissions existantes.
- New-Object …FileSystemAccessRule → crée une nouvelle règle d’accès.
- AddAccessRule → ajoute la règle à la liste.
- Set-Acl → applique la nouvelle configuration.
Vous pouvez remplacer "FullControl" par : "Read", "Write", "Modify", "ReadAndExecute" selon les besoins.
Supprimer une autorisation (RemoveAccessRule)
Pour supprimer une règle d’accès existante :
$acl = Get-Acl "C:\Partage"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Paul","FullControl","Allow")
$acl.RemoveAccessRule($rule)
Set-Acl "C:\Partage" $acl
La suppression nécessite d’utiliser exactement les mêmes paramètres que la règle initiale (même utilisateur, droit et type “Allow” ou “Deny”).
Modifier les permissions d’un dossier et de ses sous-dossiers (Set-Acl)
Pour appliquer les nouvelles autorisations à tous les sous-dossiers et fichiers :
$acl = Get-Acl "C:\Partage"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Paul","Modify","ContainerInherit,ObjectInherit","None","Allow")
$acl.SetAccessRule($rule)
Get-ChildItem "C:\Partage" -Recurse | Set-Acl -AclObject $acl
Explications :
Get-ChildItem -Recurse→ parcourt récursivement toute l’arborescence.ContainerInherit,ObjectInherit→ applique la règle aux sous-dossiers et fichiers.
Utilisez-la avec prudence sur un volume contenant beaucoup de fichiers.
Supprimer toutes les autorisations personnalisées (réinitialiser les ACL)
Pour revenir à la configuration par défaut (héritée du dossier parent) :
icacls "C:\Partage" /reset /T
Cette commande supprime toutes les règles explicites et rétablit les permissions héritées.
Elle est utile pour corriger des erreurs “Accès refusé” ou des droits corrompus.
Changer le propriétaire d’un dossier (SetOwner)
Pour appliquer le changement de propriétaire à tout un dossier et ses sous-dossiers :
$path = "C:\Dossier"
$owner = [System.Security.Principal.NTAccount]"Administrateurs"
Get-ChildItem -Path $path -Recurse -Force | ForEach-Object {
$acl = Get-Acl $_.FullName
$acl.SetOwner($owner)
Set-Acl $_.FullName $acl
}
Cette commande parcourt récursivement tous les fichiers et sous-dossiers.
Elle peut être longue sur un volume contenant de nombreux éléments.
Pour le guide complet sur le changement de propriétaire via l’interface graphique ou la ligne de commande :
Changer le propriétaire d’un dossier sous Windows 11/10
Vérifier le propriétaire actuel
Pour afficher le propriétaire d’un dossier ou fichier :
(Get-Acl "C:\Dossier").Owner
→ Renvoie le nom du compte ou groupe actuellement propriétaire du dossier.
Exemple de script complet : accorder des droits en masse
$users = @("Paul", "Jean", "ServiceRH")
$path = "C:\Dossiers\RH"
foreach ($user in $users) {
$acl = Get-Acl $path
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($user,"Modify","ContainerInherit,ObjectInherit","None","Allow")
$acl.SetAccessRule($rule)
Set-Acl $path $acl
}
Ce script attribue automatiquement les permissions “Modifier” à plusieurs utilisateurs pour un même dossier.
Tableau récapitulatif des cmdlets PowerShell pour gérer les permissions NTFS
| Cmdlet / Commande | Fonction principale | Syntaxe de base | Exemple d’utilisation |
|---|---|---|---|
| Get-Acl | Affiche la liste des autorisations (ACL) appliquées à un fichier ou dossier. | Get-Acl "C:\Dossier" | Affiche les permissions et le propriétaire du dossier. |
| Set-Acl | Applique ou met à jour des autorisations sur un fichier ou dossier. | Set-Acl "C:\Dossier" $acl | Met à jour les ACL selon les règles définies dans $acl. |
| New-Object System.Security.AccessControl.FileSystemAccessRule | Crée une nouvelle règle d’autorisation NTFS (utilisateur, droit, type). | $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Paul","Modify","Allow") | Crée une règle donnant à Paul le droit de modifier le dossier. |
| AddAccessRule() | Ajoute une nouvelle autorisation à une ACL existante. | $acl.AddAccessRule($rule) | Ajoute la règle $rule aux ACL existantes du dossier. |
| RemoveAccessRule() | Supprime une autorisation spécifique. | $acl.RemoveAccessRule($rule) | Supprime la règle $rule précédemment définie. |
| SetOwner() | Définit un nouveau propriétaire sur un dossier ou fichier. | $acl.SetOwner([System.Security.Principal.NTAccount]"Administrateurs") | Change le propriétaire pour le groupe Administrateurs. |
| Get-ChildItem -Recurse + Set-Acl | Applique des permissions à tous les sous-dossiers et fichiers. | `Get-ChildItem « C:\Dossier » -Recurse | Set-Acl -AclObject $acl` |
| **Get-Acl | Format-List** | Affiche les ACL dans un format lisible. | `Get-Acl « C:\Dossier » |
| icacls (CMD) (complément) | Réinitialise ou sauvegarde les ACL en ligne de commande. | icacls "C:\Dossier" /reset /T | Réinitialise toutes les permissions NTFS du dossier. |
| takeown (CMD) (complément) | Reprend la propriété d’un dossier ou fichier. | takeown /f "C:\Dossier" /r /d y | Attribue la propriété au compte administrateur courant. |
Notes importantes
- Les cmdlets PowerShell (
Get-Acl,Set-Acl, etc.) sont plus flexibles et scriptables que les commandes classiques (icacls,takeown). - Pour toute commande modifiant les ACL, il est recommandé d’exécuter PowerShell en tant qu’administrateur.
- Avant de modifier massivement des droits, vous pouvez sauvegarder les ACL avec :
icacls "C:\Dossier" /save C:\backup_acl.txt /T
Set-Acl.Une erreur dans la variable
$acl ou dans les permissions héritées peut supprimer des droits critiques.
Bonnes pratiques et précautions
- Ne jamais appliquer un script sans sauvegarder les ACL :
icacls "C:\Dossier" /save C:\Backup_ACL.txt /T - Utiliser la commande
Test-Pathpour vérifier les chemins avant exécution. - Toujours tester sur un dossier isolé avant d’appliquer sur un volume complet.
- Exécuter PowerShell en mode Administrateur.
Pensez à sauvegarder vos permissions avant toute modification en masse.
Ressources utiles et articles liés
- Le protocole SMB (Server Message Block) : fonctionnement et versions
- NetBIOS dans Windows (NetBT)
- Kerberos VS NT LAN Manager (NTLM)
- Comment activer/désactiver NetBIOS dans Windows 10/11
- Activer ou désactiver SMB sur Windows
- Comment partager ses fichiers et dossier en réseau entre deux PC sur Windows 11/10
- Comment lister et trouver un dossier partagé sur Windows 10/11
- Comment accéder à un dossier partagé sur Windows 11/10
- Partage de proximité de Windows 11, 10 : partager et transférer des fichiers entre PC
- Optimiser le partage et transfert de fichiers sur réseau Windows (SMB)
- Accéder aux fichiers Windows depuis Ubuntu
- Partager la connexion internet sur Windows 10
- Les autorisations NTFS (ACL) sur les fichiers et partage réseau de Windows
- Résoudre les problèmes et erreurs de partages de fichiers sur Windows
- Comment utiliser smbclient avec des exemples
- Monter un partage Windows sous Linux avec Samba
L’article Gérer les permissions NTFS avec PowerShell sur Windows 11/10 est apparu en premier sur malekal.com.