Il cmdlet Get-Acl nel modulo Security di PowerShell (Microsoft.PowerShell.Security) fa un ottimo lavoro per ottenere i permessi di file o cartelle (aka la Access Control List o ACL). Ma ottenere informazioni utili dall’output predefinito può richiedere un po’ di tempo per abituarsi.
Invece, sarebbe bello poter semplicemente vedere cosa mostra la scheda Sicurezza di un file, di una cartella o di un’altra risorsa, ma senza dover passare attraverso l’interfaccia utente di Esplora file e i clic multipli.
Figura 1: Scheda Sicurezza di una cartella in Esplora risorse
Una riga: Ottenere i permessi di file o cartelle
Ecco un one-liner per fare esattamente questo:
(get-acl <nome cartella>).access | ft IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags -auto
L’output:
La funzione Get-Permissions
Vuoi rendere l’output più leggibile? Ecco una funzione PowerShell che usa etichette personalizzate (titoli in ogni colonna della tabella).
Puoi salvarla come script PowerShell o aggiungerla al tuo profilo PowerShell in modo che sia sempre disponibile.
123456789 |
function Get-Permissions ($folder) { (get-acl $folder).access | select `@{Label="Identity";Expression={$_.IdentityReference}}, `@{Label="Right";Expression={$_.FileSystemRights}}, `@{Label="Access";Expression={$_.AccessControlType}}, `@{Label="Inherited";Expression={$_.IsInherited}}, `@{Label="Inheritance Flags";Expression={$_.InheritanceFlags}}, `@{Label="Propagation Flags";Expression={$_.PropagationFlags}} | ft -auto} |
Puoi omettere le due proprietà relative all’ereditarietà se non hai bisogno di queste informazioni.
Ora puoi usare Get-Permissions con il nome della cartella:
Get-Permissions c:\myfolder
L’output:
Puoi anche convogliare l’output dei comandi dir, ls o gci, che sono tutti alias PowerShell per la cmdlet Get-ChildItem.
dir <path> | % {Get-Permissions -path $_.fullname}
Una funzione per aprire le proprietà del file o della cartella in Explorer
Se ti piace davvero vedere i permessi nella GUI di File Explorer, puoi usare questa funzione per aprire la pagina delle proprietà > generali del file o della cartella. (Non ho trovato un modo per aprire direttamente la scheda Sicurezza. Se sai come farlo, per favore condividilo nei commenti del post).
12345678910111213141516171819202122 |
function Get-Properties ($path) {#exit if path not founddif (-not ($path | Test-Path)) { Write-Host "$path not found. Si prega di specificare un percorso di file o cartella valido". -foregroundcolor red return } $o = new-object -com Shell.Application$item = get-item $path if ($item.gettype() -eq ) {write-host "Trovata cartella $path... Ottenere proprietà"$fso = $o.Namespace("$path")$fso.self.InvokeVerb("properties") } if ($item.gettype() -eq ){write-host "Trovato file $path... Ottenere le proprietà"$fso = $o.Namespace($item.directoryname)$file = $fso.parsename($item.pschildname)$file.InvokeVerb("properties")}} |
Ora basta usare Get-Properties <Folder of file name> per aprire rapidamente la pagina delle proprietà del file o della cartella dalla shell.
Figura 2: Usa la funzione Get-Properties per aprire rapidamente le proprietà di un file o di una cartella da PowerShell
File System Security PowerShell Module
Microsoft PFE Raimund Andrée ha pubblicato il File System Security PowerShell Module tempo fa. Aggiunge alcune utili cmdlets per gestire i permessi del file system usando PowerShell. Controlla anche i suoi post corrispondenti sul blog Weekend Scripter: Use PowerShell to Get, Add, and Remove NTFS Permissions e NTFSSecurity Tutorial 2 – Managing NTFS Inheritance and Using Privileges.
Tags
PowerShell Scripts Security Windows