#Export NTFS rapide dans un fichier des droits NTFS d'un répertoire avec appel récursif pour les membres des groupes #Version du 18 avril 2013 Clear-Host $MyLine = [string] $NomFichierACreer = [string] $MonResultat = [string] $NomObjet = [string] #Valeurs nécessaire dans tous les cas $DefaultADPath = 'OU=MonOU,DC=Mondomaine,DC=Com' function Get-ScriptDirectory { $Invocation = (Get-Variable MyInvocation -Scope 1).Value $ScriptFolderPath = Split-Path $Invocation.MyCommand.Path return $ScriptFolderPath } function CheckQuestActiveRolesADM() { #Test la présence des outils Quest $Error.Clear() Get-PSSnapin Quest.ActiveRoles.ADManagement if($Error.Count -ne 0) { Clear-Host Write-Host "`n`n`t`t ERROR - To run this script, the Quest.ActiveRoles.ADManagement must be installed and registered with Powershell." -foregroundcolor red -backgroundColor yellow Write-Host "`t`t go to the Settings menu in Powershell Plus and click on Manage Snapins." -foregroundcolor red -backgroundColor yellow break } } function ListACL(){ param([string]$ObjectToProcess) #On recupere les droits de l objet a traiter $objACL = Get-ACL $ObjectToProcess foreach ($MySubACL in $objACL.Access) { $MyLine = "" + $MySubACL.IdentityReference + "`t" + $MySubACL.AccessControlType + "`t" + $MySubACL.FileSystemRights + "`t" + $MySubACL.IsInherited + "`t" + $MySubACL.PropagationFlags add-content $MonFichier $MyLine $NomObjet = $MySubACL.IdentityReference $NomObjet = [string] $NomObjet $Error.Clear() $ErrorActionPreference = "silentlycontinue" #$MesGroupes = Get-QADGroupMember -name $NomObjet -searchroot $ADRoot -sizelimit 0 #$MesGroupes = Get-QADGroupMember $NomObjet -Indirect -ErrorVariable Err -ErrorAction SilentlyContinue $MesGroupes = Get-QADGroupMember $NomObjet -Indirect -ErrorVariable Err if ($error.Count -ieq 0){ add-content $MonFichier "`tMembres de $NomObjet" foreach ($UneLigne in $MesGroupes){ add-content $MonFichier "`t`t$UneLigne" } } else{ #Affichage éventuel de l'erreur #Write-Host $Err[0] } } } #Test de la présence des outils Quest CheckQuestActiveRolesADM $DefaultValue = Get-ScriptDirectory $ObjectToProcess = Read-Host "Chemin du répertoire à traiter (par défaut : $DefaultValue)" if($ObjectToProcess -eq $null){$ObjectToProcess = $DefaultValue} if($ObjectToProcess -eq ""){$ObjectToProcess = $DefaultValue} if ($ObjectToProcess.Length -igt 0){ $NomFichierACreer = $ObjectToProcess -replace '[^a-zA-Z 0-9]+','' $SubFolderModified = $NomFichierACreer -replace '[ ]+',' ' ##Histoire de retirer les espaces consécutifs $NomFichierACreer = "Groupes en acces sur $SubFolderModified.txt" } else{break} $EmplacementFichier = Get-ScriptDirectory $EmplacementFichier = "$EmplacementFichier\$NomFichierACreer" $ADRoot = Read-Host "Racine de l'AD (par défaut : $DefaultADPath)" if($ADRoot -eq $null){$ADRoot = $DefaultADPath} if($ADRoot -eq ""){$ADRoot = $DefaultADPath} #Création du fichier avec les résultats $MonFichier = New-Item -type file $EmplacementFichier -Force add-content $MonFichier "Accès en place sur $ObjectToProcess :" add-content $MonFichier "" ListACL -ObjectToProcess $ObjectToProcess Write-Host "C'est terminé."