Dump delle ACL NTFS (Powershell e CMD)

| |

PowershellProblema posto: recuperare le ACL di tutte le cartelle contenute all’interno di una directory padre, esplodendo e fornendo in chiaro i membri dei gruppi eventualmente presenti e autorizzati in Read Only o Read and Write. Dato che l’utility DumpSec (ex-DumpACL, di Somarsoft) non è poi così infallibile e fatta per filtrare la singola cartella con poco sforzo, ho pensato di passare da Powershell e da un’ottima base fornita in questo articolo: my-powershell.com/export-backup-ntfs-permissions.

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 }
""
view raw DumpACL.ps1 hosted with ❤ by GitHub

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!

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

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! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Commenti
Oldest
Newest Most Voted
Inline Feedbacks
View all comments