Ho quindi costruito un più articolato script intorno a quell’istruzione principale, che possa accettare parametri da riga di comando e permettervi di stabilire se fare un’analisi ricorsiva e su quale file CSV esportare il risultato:
############################################################################################################################ | |
# AD: NTFS DumpACL (Recursive) | |
#---------------------------------------------------------------------------------------------------------------- | |
# Autore: - (modifiche: GSolone) | |
# URL Originale: http://www.my-powershell.com/export-backup-ntfs-permissions/ | |
# Versione: 0.1 | |
# Utilizzo: .\DumpACL.ps1 | |
# (opzionale, passaggio dati da prompt) .\DumpACL.ps1 \\server\folder | |
# (opzionale, passaggio dati da prompt) .\DumpACL.ps1 \\server\folder -Recursive N (esclude ricorsività) | |
# (opzionale, passaggio dati da prompt) .\DumpACL.ps1 \\server\folder -CSV C:\temp\acl.csv | |
# Info: http://gioxx.org/tag/powershell | |
# Ultima modifica: 26-02-2016 | |
# Modifiche: - | |
############################################################################################################################ | |
#Verifica parametri da prompt | |
Param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)] | |
[string] $Folder, | |
[Parameter(Position=1, Mandatory=$false, ValueFromPipeline=$true)] | |
[string] $Recursive, | |
[Parameter(Position=2, Mandatory=$false, ValueFromPipeline=$true)] | |
[string] $CSV | |
) | |
#Verifica CSV, se passato da prompt | |
if ( [string]::IsNullOrEmpty($CSV) ) { | |
if( (Test-Path "C:\Temp") -eq 0 ) { mkdir "C:\Temp" } | |
$CSV = "C:\Temp\DumpACL.csv" | |
Write-Host "Percorso e nome CSV non specificato, utilizzo $CSV ..." -f "Yellow" | |
} | |
#Verifico configurazione default | |
if ( [string]::IsNullOrEmpty($Recursive) ) { | |
Write-Host "Ricorsività non specificata, utilizzo default (ricorsivo) ..." -f "Yellow" | |
} | |
#Verifica ricorsività | |
if ( [string]::IsNullOrEmpty($Recursive) ) { | |
"" | |
Write-Host "Dump ACL da: $folder (ricorsivo, salvo in $CSV)" | |
Get-Childitem -path "$folder" -recurse | Where-Object {$_.PSIsContainer} | Get-ACL | Select-Object Path -ExpandProperty Access | Export-CSV $CSV | |
} else { | |
"" | |
Write-Host "Dump ACL da: $folder (NON ricorsivo, salvo in $CSV)" | |
if ( $Recursive -eq "n" ) { Get-Childitem -path "$folder" | Where-Object {$_.PSIsContainer} | Get-ACL | Select-Object Path -ExpandProperty Access | Export-CSV $CSV } | |
} | |
Write-Host "Done." -f "Green" | |
"" | |
# Chiedo se visualizzare i risultati esportati nel file CSV | |
$message = "Devo aprire il file CSV $CSV ?" | |
$Yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "" | |
$No = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "" | |
$options = [System.Management.Automation.Host.ChoiceDescription[]]($Yes, $No) | |
$Excel = $host.ui.PromptForChoice("", $message, $options, 1) | |
if ($Excel -eq 0) { Invoke-Item $CSV } | |
"" |
Si ottiene in output un file CSV (già detto) che potrà essere aperto in Excel, così da riuscire poi a organizzare i dati in colonna (sono separati da virgola, nda) e vedere così i gruppi ai quali è stata data un’autorizzazione (sia essa in sola lettura o anche scrittura, o magari solo in Traverse folder). A questo punto basta e avanza una query lanciata da un prompt dei comandi, come questa:
dsquery group DC=contoso,DC=com -name $NOMEGRUPPO | dsget group -members
Dove occorrerà sostituire “contoso” e “com” con il proprio dominio, $NOMEGRUPPO con il vero nome del gruppo del quale si vogliono conoscere i membri, come spiegato in questo post: gohgarry.wordpress.com/2011/06/09/dsquery-export-ad-group-members-to-text.
Per chi se lo stesse chiedendo: si può sostituire l’utilizzo di Powershell con ICACLS. Ci ho provato ma i risultati ottenuti non erano presentabili a un utente che non è solito lavorare con questo tipo di tool. Ho quindi preferito Powershell per la possibilità di esportare in un CSV facilmente editabile e inviabile a mezzo posta elettronica.
Buon lavoro!
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)