Cambia el descriptor de seguridad de un elemento especificado, como un archivo o una clave del registro.
Sintaxis
Set-Acl <String> <Object> >] >]
Set-Acl <PSObject> <Object> >] >]
Set-Acl -LiteralPath <String> <Object> >] >]
Descripción
El cmdlet Set-Acl
cambia el descriptor de seguridad de un elemento especificado, como un archivo o una clave de aregistro, para que coincida con los valores de un descriptor de seguridad que usted proporciona.
Para utilizar Set-Acl
, use el parámetro Path o InputObject para identificar el elemento cuyo descriptor de seguridad desea cambiar. Luego, utilice los parámetros AclObject o SecurityDescriptor para suministrar un descriptor de seguridad que tenga los valores que desea aplicar. Set-Acl
aplica el descriptor de seguridad suministrado. Utiliza el valor del parámetro AclObject como modelo y cambia los valores del descriptor de seguridad del elemento para que coincidan con los valores del parámetro AclObject.
Ejemplos
Ejemplo 1: Copiar un descriptor de seguridad de un archivo a otro
$DogACL = Get-Acl -Path "C:\Dog.txt"Set-Acl -Path "C:\Cat.txt" -AclObject $DogACL
Estos comandos copian los valores del descriptor de seguridad del archivo Dog.txt al descriptor de seguridad del archivo Cat.txt. Cuando los comandos se completan, los descriptores de seguridad de los archivos Dog.txt y Cat.txt son idénticos.
El primer comando utiliza el cmdlet Get-Acl
para obtener el descriptor de seguridad del archivo Dog.txt.El operador de asignación (=
) almacena el descriptor de seguridad en el valor de la variable $DogACL.
El segundo comando utiliza Set-Acl
para cambiar los valores de la ACL de Cat.txt a los valores de$DogACL
.
El valor del parámetro Path es la ruta del archivo Cat.txt. El valor del parámetro AclObject es la ACL del modelo, en este caso, la ACL de Dog.txt guardada en la variable $DogACL
.
Ejemplo 2: Utilizar el operador pipeline para pasar un descriptor
Get-Acl -Path "C:\Dog.txt" | Set-Acl -Path "C:\Cat.txt"
Este comando es casi igual que el del ejemplo anterior, salvo que utiliza el operador apipeline (|
) para enviar el descriptor de seguridad de un comando Get-Acl
a un comando Set-Acl
.
El primer comando utiliza el cmdlet Get-Acl
para obtener el descriptor de seguridad del archivo Dog.txt. El operadorpipeline (|
) pasa un objeto que representa el descriptor de seguridad de Dog.txt al cmdletSet-Acl
.
El segundo comando utiliza Set-Acl
para aplicar el descriptor de seguridad de Dog.txt a Cat.txt.Cuando el comando se completa, las ACL de los archivos Dog.txt y Cat.txt son idénticas.
Ejemplo 3: Aplicar un descriptor de seguridad a varios archivos
$NewAcl = Get-Acl File0.txtGet-ChildItem -Path "C:\temp" -Recurse -Include "*.txt" -Force | Set-Acl -AclObject $NewAcl
Estos comandos aplican los descriptores de seguridad del archivo File0.txt a todos los archivos de texto en el directorio C:\Temp
y todos sus subdirectorios.
El primer comando obtiene el descriptor de seguridad del archivo File0.txt en el directorio actual y utiliza el operador de asignación (=
) para almacenarlo en la variable $NewACL
.
El primer comando de la cadena utiliza el cmdlet Get-ChildItem para obtener todos los archivos de texto en el directorioC:\Temp
. El parámetro Recurse extiende el comando a todos los subdirectorios deC:\temp
. El parámetro Include limita los archivos recuperados a los que tienen la extensión de nombre de archivo .txt
. El parámetro Force obtiene los archivos ocultos, que de otro modo quedarían excluidos. (No se puede utilizar c:\temp\*.txt
, porque el parámetro Recurse funciona en directorios, no en archivos.)
El operador de canalización (|
) envía los objetos que representan los archivos recuperados al cmdlet Set-Acl
, que aplica el descriptor de seguridad en el parámetro AclObject a todos los archivos en la canalización.
En la práctica, es mejor utilizar el parámetro WhatIf con todos los comandos Set-Acl
que pueden afectar a más de un elemento. En este caso, el segundo comando de la cadena sería Set-Acl -AclObject $NewAcl -WhatIf
. Este comando enumera los archivos que se verían afectados por el comando. Después de revisar el resultado, puede ejecutar el comando de nuevo sin el parámetro WhatIf.
Ejemplo 4: Desactivar la herencia y preservar las reglas de acceso heredadas
$NewAcl = Get-Acl -Path "C:\Pets\Dog.txt"$isProtected = $true$preserveInheritance = $true$NewAcl.SetAccessRuleProtection($isProtected, $preserveInheritance)Set-Acl -Path "C:\Pets\Dog.txt" -AclObject $NewAcl
Estos comandos son deshabilitarán la herencia de acceso de las carpetas padre, al tiempo que preservan las reglas de acceso heredadas existentes.
El primer comando utiliza el cmdlet Get-Acl
para obtener el descriptor de seguridad del archivo Dog.txt.
A continuación, se crean variables para convertir las reglas de acceso heredadas en reglas de acceso explícitas. Para proteger las reglas de acceso asociadas a esto de la herencia, establezca la variable $isProtected
a$true
.Para permitir la herencia, establezca $isProtected
a $false
. La variable $preserveInheritance
se establece en $true
para preservar las reglas de acceso heredadas; false para eliminar las reglas de acceso heredadas. Luego se actualiza la protección de la regla de acceso utilizando el métodoSetAccessRuleProtection().
El último comando utiliza Set-Acl
para aplicar el descriptor de seguridad de a Dog.txt. Cuando el comando se complete, las ACL del archivo Dog.txt que se heredaron de la carpeta Pets se aplicarán directamente a Dog.txt, y las nuevas políticas de acceso añadidas a Pets no cambiarán el acceso a Dog.txt.
Ejemplo 5: Conceder a los administradores el control total del archivo
$NewAcl = Get-Acl -Path "C:\Pets\Dog.txt"# Set properties$identity = "BUILTIN\Administrators"$fileSystemRights = "FullControl"$type = "Allow"# Create new rule$fileSystemAccessRuleArgumentList = $identity, $fileSystemRights, $type$fileSystemAccessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $fileSystemAccessRuleArgumentList# Apply new rule$NewAcl.SetAccessRule($fileSystemAccessRule)Set-Acl -Path "C:\Pets\Dog.txt" -AclObject $NewAcl
Este comando concederá al grupo BUILTIN\Administrators el control total del archivo Dog.txt.
El primer comando utiliza el cmdlet Get-Acl
para obtener el descriptor de seguridad del archivo Dog.txt.
Se crean las siguientes variables para conceder al grupo BUILTINAdministrators el control total del archivo Dog.txt. La variable $identity
establecida con el nombre de la cuenta auser. La variable $fileSystemRights
establecida como FullControl, y puede ser cualquiera de los valores de FileSystemRights que especifica el tipo de operación asociada con la regla de acceso. La variable $type
establecida como «Allow» para especificar si se debe permitir o denegar la operación. La variable $fileSystemAccessRuleArgumentList
es una lista de argumentos que se debe pasar al crear el nuevo objeto FileSystemAccessRule. Entonces se crea un nuevo objeto FileSystemAccessRule, y el objeto FileSystemAccessRule se pasa al métodoSetAccessRule(), añade la nueva regla de acceso.
El último comando utiliza Set-Acl
para aplicar el descriptor de seguridad de a Dog.txt. Cuando el comando se complete, el grupo BUILTINAdministradores tendrá el control total del Dog.txt.
Parámetros
Especifica una ACL con los valores de propiedad deseados. Set-Acl
Cambia la ACL del elemento especificado por el parámetro Path o InputObject para que coincida con los valores del objeto de seguridad especificado.
Puede guardar la salida de un comando Get-Acl
en una variable y luego utilizar el parámetro AclObject para pasar la variable, o escribir un comando Get-Acl
.
Tipo: | Objeto |
Posición: | 1 |
Valor por defecto: | Ninguna |
Acepta la entrada de la tubería: | True |
Acepta caracteres comodín: | False |
Elimina la política de acceso central del elemento especificado.
A partir de Windows Server 2012, los administradores pueden utilizar Active Directory y la directiva de grupo para establecer políticas de acceso central para usuarios y grupos. Para obtener más información, consulte Control de acceso dinámico: Descripción del escenario.
Este parámetro se introdujo en Windows PowerShell 3.0.
Tipo: | SwitchParameter |
Posición: | Nombre |
Valor predeterminado: | False |
Acepta la entrada de la tubería: | False |
Aceptar caracteres comodín: | False |
Le pide confirmación antes de ejecutar el cmdlet.
Tipo: | SwitchParameter |
Aliases: | cf |
Posición: | Nombre |
Valor por defecto: | Falso |
Aceptar entrada de tuberías: | Falso |
Aceptar caracteres comodín: | Falso |
Permite los elementos especificados. El valor de este parámetro califica el parámetro Path. Introduzca un elemento o patrón de ruta, como *.txt
. Se permiten los comodines.
Tipo: | Cadena |
Posición: | Nombre |
Valor por defecto: | Ninguna |
Acepta la entrada de la tubería: | Falso |
Acepta caracteres comodín: | Verdadero |
Especifica un filtro en el formato o idioma del proveedor. El valor de este parámetro califica el parámetroPath. La sintaxis del filtro, incluyendo el uso de comodines, depende delproveedor. Los filtros son más eficientes que otros parámetros, porque el proveedor los aplica cuando recupera los objetos, en lugar de que PowerShell filtre los objetos después de recuperarlos.
Tipo: | Cadena |
Posición: | Nombre |
Valor por defecto: | Ninguna |
Acepta la entrada de la tubería: | Falso |
Acepta caracteres comodín: | Verdadero |
Cambia sólo los elementos especificados. El valor de este parámetro califica el parámetro Path.Introduzca un elemento o patrón de ruta, como *.txt
. Se permiten los comodines.
Tipo: | Cadena |
Posición: | Nombre |
Valor por defecto: | Ninguna |
Acepta la entrada de la tubería: | Falso |
Acepta caracteres comodín: | Verdadero |
Cambia el descriptor de seguridad del objeto especificado. Introduzca una variable que contenga el objeto o un comando que obtenga el objeto.
No puede canalizar el objeto que se va a cambiar a Set-Acl
. En su lugar, utilice el parámetro InputObjectexplícitamente en el comando.
Este parámetro se introdujo en Windows PowerShell 3.0.
Tipo: | PSObject |
Posición: | 0 |
Valor por defecto: | Ninguna |
Acepta la entrada de la tubería: | Verdadero |
Acepta caracteres comodín: | Falso |
Cambia el descriptor de seguridad del elemento especificado. A diferencia de Path, el valor del parámetroLiteralPath se utiliza exactamente como se escribe. No se interpretan caracteres como comodines. Si la ruta incluye caracteres de escape, enciérrela entre comillas simples ('
).Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape.
Este parámetro se introdujo en Windows PowerShell 3.0.
Tipo: | Cadena |
Alias: | PSPath |
Posición: | Nombrado |
Valor por defecto: | Nada |
Aceptar entrada de tuberías: | True |
Acepta caracteres comodín: | False |
Devuelve un objeto que representa el descriptor de seguridad que se ha modificado. Por defecto, este cmdletno genera ninguna salida.
Tipo: | SwitchParameter |
Posición: | Nombre |
Valor por defecto: | Ninguna |
Acepta la entrada de la tubería: | Falso |
Acepta caracteres comodín: | Falso |
Cambia el descriptor de seguridad del elemento especificado. Introduzca la ruta de acceso a un elemento, como una ruta de acceso a un archivo o una clave del registro. Se permiten comodines.
Si pasa un objeto de seguridad a Set-Acl
(ya sea utilizando los parámetros AclObject o SecurityDescriptor o pasando un objeto de seguridad desde Get-Acl a Set-Acl
), y omite el parámetro Path (nombre y valor), Set-Acl
utiliza la ruta que se incluye en este objeto de seguridad.
Tipo: | Cadena |
Posición: | 0 |
Valor por defecto: | Ninguna |
Acepta la entrada de la tubería: | True |
Acepta caracteres comodín: | True |
Muestra lo que ocurriría si el cmdlet se ejecuta. El cmdlet no se ejecuta.
Tipo: | SwitchParameter |
Aliases: | wi |
Posición: | Nombre |
Valor por defecto: | Falso |
Aceptar entrada de tuberías: | Falso |
Aceptar caracteres comodín: | Falso |
Entradas
System.Security.AccessControl.ObjectSecurity, System.Security.AccessControl.CommonSecurityDescriptor
Puede canalizar un objeto ACL o un descriptor de seguridad a Set-Acl
.
Outputs
FileSecurity
Por defecto, Set-Acl
no genera ninguna salida. Sin embargo, si se utiliza el parámetro Passthru, genera un objeto de seguridad. El tipo de objeto de seguridad depende del tipo de elemento.
Notas
Este cmdlet sólo está disponible en plataformas Windows.
El cmdlet Set-Acl
es compatible con el sistema de archivos de PowerShell y los proveedores del registro. Como tal, puede utilizarlo para cambiar los descriptores de seguridad de archivos, directorios y claves del registro.
- Get-Acl
- FileSystemAccessRule
- ObjectSecurity.SetAccessRuleProtection
- FileSystemRights