Después de mucho trabajar pudimos encontrar la respuesta de esta dificultad que tantos lectores de este espacio presentan. Si tienes alguna información que compartir puedes aportar tu información.
Solución:
Especificación de la herencia en el FileSystemAccessRule()
constructor corrige esto, como lo demuestra el código modificado a continuación (observe los dos nuevos parámetros de constructor insertados entre "FullControl"
y "Allow"
).
$Acl = Get-Acl "\R9N2WRNShare"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("user", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl "\R9N2WRNShare" $Acl
De acuerdo con este tema
“cuando crea una FileSystemAccessRule de la manera que lo ha hecho, la propiedad InheritanceFlags se establece en Ninguno. En la GUI, esto corresponde a un ACE con el cuadro Aplicar a establecido en “Solo esta carpeta”, y ese tipo de entrada debe verse a través de la configuración avanzada”.
Probé la modificación y funciona, pero, por supuesto, el crédito se debe a que el MVP publicó la respuesta en ese tema.
Refiriéndose a la respuesta de Gamaliel: $args es un array de los argumentos que se pasan a un script en tiempo de ejecución, por lo que no se pueden usar de la forma en que lo está usando Gamaliel. Esto realmente está funcionando:
$myPath = 'C:whatever.file'
# get actual Acl entry
$myAcl = Get-Acl "$myPath"
$myAclEntry = "DomainUser","FullControl","Allow"
$myAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($myAclEntry)
# prepare new Acl
$myAcl.SetAccessRule($myAccessRule)
$myAcl | Set-Acl "$MyPath"
# check if added entry present
Get-Acl "$myPath" | fl
En caso de que tenga que lidiar con muchas subcarpetas que contienen subcarpetas y otras cosas recursivas. Pequeña mejora de @Mike L’Angelo:
$mypath = "path_to_folder"
$myacl = Get-Acl $mypath
$myaclentry = "username","FullControl","Allow"
$myaccessrule = New-Object System.Security.AccessControl.FileSystemAccessRule($myaclentry)
$myacl.SetAccessRule($myaccessrule)
Get-ChildItem -Path "$mypath" -Recurse -Force | Set-Acl -AclObject $myacl -Verbose
La verbosidad es opcional en la última línea.
Recuerda algo, que tienes concesión de agregar una reseña si diste con el arreglo.