Le script PowerShell que nous allons examiner aujourd’hui permet d’obtenir une liste détaillée des autorisations (ACL) pour tous les dossiers partagés dans un répertoire parent spécifié. Cette information est précieuse pour auditer et gérer les accès aux ressources partagées de votre système.
Voici le script complet :
# 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
Fonctionnement du script
Le script commence par définir le chemin du répertoire parent contenant les dossiers partagés à analyser. Cela se fait avec la ligne suivante :
powershell$repertoireParent = "D:\PARTAGE"
Vous pouvez remplacer "D:\PARTAGE" par le chemin du répertoire parent de votre choix.Ensuite, le script récupère tous les dossiers présents dans le répertoire parent à l’aide de la commande Get-ChildItem :
powershell$dossiers = Get-ChildItem -Path $repertoireParent -Directory
L’option -Directory permet de ne récupérer que les dossiers, et non les fichiers.Une fois les dossiers obtenus, le script initialise un tableau vide $resultats pour stocker les informations d’autorisations.
powershell$resultats = @()
Puis, il entre dans une boucle foreach pour parcourir chaque dossier :
powershellforeach ($dossier in $dossiers) {
# ...
}
À l’intérieur de cette boucle, le script récupère les ACL (Access Control Lists) du dossier actuel avec la commande Get-Acl et sélectionne uniquement les entrées d’accès avec Select-Object -ExpandProperty Access.
powershell$acls = Get-Acl -Path $dossier.FullName | Select-Object -ExpandProperty Access
Ensuite, une seconde boucle foreach est utilisée pour parcourir chaque entrée d’accès (ACL) du dossier actuel.
powershellforeach ($acl in $acls) {
# ...
}
À l’intérieur de cette boucle, un objet personnalisé PSCustomObject est créé avec les propriétés suivantes :
DossierPartage: Le chemin complet du dossier partagéUtilisateurGroupe: L’utilisateur ou le groupe auquel l’entrée d’accès est accordéeDroits: Les droits d’accès accordés (lecture, écriture, exécution, etc.)
powershell$ligneResultat = [PSCustomObject]@{
"DossierPartage" = $dossier.FullName
"UtilisateurGroupe" = $acl.IdentityReference
"Droits" = $acl.FileSystemRights
}
Cet objet est ensuite ajouté au tableau $resultats.
powershell$resultats += $ligneResultat
Une fois toutes les entrées d’accès traitées pour tous les dossiers, le script exporte le contenu du tableau $resultats dans un fichier CSV à l’aide de la commande Export-Csv.
powershell$resultats | Export-Csv -Path "C:\temp\list_share_acl.csv" -NoTypeInformation -Encoding UTF8
Les options utilisées sont les suivantes :
-Path: Spécifie le chemin et le nom du fichier CSV à créer-NoTypeInformation: Empêche l’ajout d’informations de type dans le fichier CSV-Encoding UTF8: Définit l’encodage du fichier CSV en UTF-8 pour une meilleure compatibilité
Utilité du script
Ce script est particulièrement utile pour les administrateurs système qui doivent auditer et gérer les autorisations sur les dossiers partagés de leur environnement. En exportant les informations d’autorisations dans un fichier CSV, il devient facile de les analyser, de les filtrer et de les partager avec d’autres équipes ou parties prenantes.De plus, ce script peut être exécuté régulièrement (par exemple, via une tâche planifiée) pour surveiller les changements d’autorisations et détecter les accès indésirables ou les dérives de sécurité.
Personnalisation du script
Bien que le script soit fonctionnel tel quel, vous pouvez le personnaliser selon vos besoins spécifiques. Par exemple, vous pouvez ajouter des filtres pour n’analyser qu’un sous-ensemble de dossiers, ou inclure des informations supplémentaires dans le fichier CSV exporté.De même, vous pouvez adapter le chemin du répertoire parent et le chemin du fichier CSV exporté pour correspondre à votre environnement.N’hésitez pas à partager vos expériences et vos améliorations avec la communauté PowerShell !
