NTFS con Powershell

Powershell trae dos cmdlets para administrar los permisos NTFS de carpetas y ficheros. get-acl y set-acl. Algo escasos para todas las labores de un administrador de sistemas. Raimund Andrée viene al rescate con NTFSSecurity un modulo powershell que podeis encontrar en codeplex.
Ademas desde la versión 3.0 del modulo, ha implementado la solución de AlphaFS al problema de Windows con rutas largas (MAX_PATH superior a 260 caracteres).
Aqui teneis un script que recorre todas las subcarpetas de una ruta dada y encuentra cortes de herencia y lista los permisos explicitos.



Function logging($msg,$color)
{
$logfile=($laruta -replace ("[\\/:*?<>|]","_")) + "_security.csv"
if ($color -eq $null){$color="white"}
write-host $msg -fore $color
out-file $logfile -input $msg -append
}
Function leer-acl($ruta)
{
TRY{$acl=get-access $ruta -excludeinherited -ErrorAction stop
 if ($acl -ne $null)
 {
 logging "Permisos explicitos  $ruta" "magenta"
 $acl|%{
  if ($_.isinherited -eq $false){logging "$($_.account.accountname) $($_.accesscontroltype) $($_.accessrights) $ruta"}
  }#fin ACL
 }#fin if ACL null
} #try -excludeinherited
CATCH{WRITE-HOST $_.Exception.Message -FORE YELLOW
 logging "No se puede acceder  $ruta" "red"
}#fin del catch
}#fin function leer-acl
##main##
import-module .\NTFSSecurity
if ($args[0] -eq $null)
{
$laruta=read-host "Ruta a revisar permisos NTFS?"
}
else
{
$laruta=$args[0]
}
$inicio=get-date

leer-acl $laruta
TRY{$carpetas=dir2 $laruta -recurse|?{$_.Attributes -eq "Directory"} -ErrorAction stop}
CATCH{logging "Acceso Denegado  $ruta" "red"}
foreach ($carpeta in $carpetas)
{
write-host "." -nonewline
leer-acl $carpeta.fullname
}
$fin=get-date
$intTimeInterval_H = [int32]($fin - $inicio).hours
$intTimeInterval_M = [int32]($fin - $inicio).minutes
logging "hora inicio: $inicio"
logging "hora fin: $fin"
logging "El proceso ha durado $intTimeInterval_H horas y $intTimeInterval_M minutos"

Comentarios