Introduction
Ce script PowerShell est conçu pour explorer un répertoire parent, obtenir les listes de contrôle d’accès (ACL) de tous les sous-dossiers, et exporter ces informations dans un fichier CSV. Les ACL définissent les permissions des utilisateurs et groupes sur les fichiers et dossiers, ce qui est crucial pour la gestion de la sécurité et des droits d’accès dans un environnement réseau.
# Définir le chemin du répertoire parent
$repertoireParent = « D:\PARTAGE »
# Obtenir tous les dossiers du répertoire parent
$dossiers = Get-ChildItem -Path $repertoireParent -Directory
# Initialiser une variable pour stocker les résultats
$resultats = @()
# Parcourir chaque dossier
foreach ($dossier in $dossiers) {
# Obtenir les ACL du dossier actuel
$acls = Get-Acl -Path $dossier.FullName | Select-Object -ExpandProperty Access
# Parcourir chaque ACL
foreach ($acl in $acls) {
# Créer une ligne de résultat avec le dossier partagé, l’utilisateur ou le groupe, et les droits
$ligneResultat = [PSCustomObject]@{
« DossierPartage » = $dossier.FullName
« UtilisateurGroupe » = $acl.IdentityReference
« Droits » = $acl.FileSystemRights
}
# Ajouter la ligne de résultat à la variable $resultats
$resultats += $ligneResultat
}
}
# Exporter les résultats dans un fichier texte en format CSV
$resultats | Export-Csv -Path « C:\temp\list_share_acl.csv » -NoTypeInformation -Encoding UTF8
Utilité du Script
- Audit de Sécurité : Il permet de vérifier les permissions attribuées aux différents utilisateurs et groupes sur les dossiers partagés, facilitant ainsi l’audit de sécurité.
- Gestion des Droits d’Accès : Les administrateurs peuvent utiliser ce script pour identifier rapidement qui a accès à quels dossiers et quels types de droits sont accordés.
- Documentation : Il génère une documentation actualisée des permissions des dossiers partagés, utile pour la gestion et la maintenance du système.
Description du Script
Le script se compose de plusieurs parties distinctes, chacune ayant une fonction précise :
- Définir le Chemin du Répertoire ParentpowershellCopier le code
$repertoireParent = "D:\PARTAGE"Cette ligne définit le chemin du répertoire parent dont les sous-dossiers seront analysés. - Obtenir Tous les Dossiers du Répertoire ParentpowershellCopier le code
$dossiers = Get-ChildItem -Path $repertoireParent -DirectoryGet-ChildItemest utilisé pour obtenir tous les sous-dossiers du répertoire parent spécifié. - Initialiser une Variable pour Stocker les RésultatspowershellCopier le code
$resultats = @()Une liste vide$resultatsest initialisée pour stocker les informations des ACL des différents dossiers. - Parcourir Chaque DossierpowershellCopier le code
foreach ($dossier in $dossiers) { ... }Une boucleforeachpermet de traiter chaque dossier individuellement. - Obtenir les ACL du Dossier ActuelpowershellCopier le code
$acls = Get-Acl -Path $dossier.FullName | Select-Object -ExpandProperty AccessGet-Aclrécupère les ACL du dossier actuel, etSelect-Object -ExpandProperty Accessextrait les entrées d’accès (ACE). - Parcourir Chaque ACLpowershellCopier le code
foreach ($acl in $acls) { ... }Une boucle imbriquéeforeachpermet de traiter chaque ACE de la liste des ACL. - Créer et Ajouter une Ligne de RésultatpowershellCopier le code
$ligneResultat = [PSCustomObject]@{ "DossierPartage" = $dossier.FullName "UtilisateurGroupe" = $acl.IdentityReference "Droits" = $acl.FileSystemRights } $resultats += $ligneResultatPour chaque ACE, un objet personnalisé (PSCustomObject) est créé avec les informations pertinentes (dossier, utilisateur/groupe, droits), puis ajouté à la liste des résultats. - Exporter les Résultats dans un Fichier CSVpowershellCopier le code
$resultats | Export-Csv -Path "C:\temp\list_share_acl.csv" -NoTypeInformation -Encoding UTF8Enfin,Export-Csvexporte la liste des résultats dans un fichier CSV, rendant les données facilement consultables et exploitables.
Variantes du Script
- Filtrage des Droits : Ajouter des conditions pour ne récupérer que certains types de permissions (e.g., Read, Write).powershellCopier le code
if ($acl.FileSystemRights -eq 'FullControl') { ... } - Inclure les Fichiers : Modifier
Get-ChildItempour inclure les fichiers en plus des dossiers.powershellCopier le code$items = Get-ChildItem -Path $repertoireParent -Recurse - Personnalisation de l’Export : Changer le format de sortie pour JSON ou XML selon les besoins.powershellCopier le code
$resultats | ConvertTo-Json | Out-File -Path "C:\temp\list_share_acl.json"
Conclusion
Ce script est un outil puissant pour les administrateurs systèmes, leur permettant de gérer et auditer efficacement les permissions des dossiers partagés. En automatisant la collecte et l’exportation des ACL, il facilite la surveillance et le maintien de la sécurité dans l’environnement informatique. Les variantes proposées montrent comment adapter le script pour répondre à des besoins spécifiques.
