Set-Acl

Altera o descritor de segurança de um item especificado, como um arquivo ou chave do registro.

Syntax

Set-Acl
   [-Path] <String[]>
   [-AclObject] <Object>
   [-ClearCentralAccessPolicy]
   [-Passthru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-Acl
   [-InputObject] <PSObject>
   [-AclObject] <Object>
   [-Passthru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-Acl
   -LiteralPath <String[]>
   [-AclObject] <Object>
   [-ClearCentralAccessPolicy]
   [-Passthru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Description

O Set-Acl cmdlet altera o descritor de segurança de um item especificado, como um arquivo ou uma chave do Registro, para corresponder aos valores em um descritor de segurança que você fornece.

Para usar Set-Acl, use o parâmetro Path ou InputObject para identificar o item cujo descritor de segurança você deseja alterar. Em seguida, use os parâmetros AclObject ou SecurityDescriptor para fornecer um descritor de segurança com os valores que deseja aplicar. Set-Acl aplica o descritor de segurança fornecido. Ele usa o valor do parâmetro AclObject como um modelo e altera os valores no descritor de segurança do item para que correspondam aos valores do parâmetro AclObject.

Exemplos

Exemplo 1: copiar um descritor de segurança de um arquivo para outro

$DogACL = Get-Acl -Path "C:\Dog.txt"
Set-Acl -Path "C:\Cat.txt" -AclObject $DogACL

Esse comando copia os valores do descritor de segurança do arquivo Dog.txt para o descritor de segurança do arquivo Cat.txt. Quando os comandos forem concluídos, os descritores de segurança dos arquivos Dog.txt e Cat.txt serão idênticos.

O primeiro comando usa o Get-Acl cmdlet para obter o descritor de segurança do arquivo Dog.txt. O operador de atribuição (=) armazena o descritor de segurança no valor da variável $DogACL.

O segundo comando usa Set-Acl para alterar os valores na ACL de Cat.txt para os valores em $DogACL.

O valor do parâmetro Path é o caminho para o arquivo Cat.txt. O valor do parâmetro AclObject é a ACL de modelo, nesse caso, a ACL de Dog.txt conforme salva na $DogACL variável.

Exemplo 2: usar o operador de pipeline para passar um descritor

Get-Acl -Path "C:\Dog.txt" | Set-Acl -Path "C:\Cat.txt"

Esse comando é quase o mesmo que o comando no exemplo anterior, exceto que ele usa um operador de pipeline (|) para enviar o descritor de segurança de um Get-Acl comando para um Set-Acl comando.

O primeiro comando usa o Get-Acl cmdlet para obter o descritor de segurança do arquivo Dog.txt. O operador de pipeline (|) passa um objeto que representa o descritor de segurança Dog.txt para o Set-Acl cmdlet.

O segundo comando usa Set-Acl para aplicar o descritor de segurança do Dog.txt a Cat.txt. Quando o comando for concluído, as ACLs dos arquivos Dog.txt e Cat.txt serão idênticas.

Exemplo 3: aplicar um descritor de segurança a vários arquivos

$NewAcl = Get-Acl File0.txt
Get-ChildItem -Path "C:\temp" -Recurse -Include "*.txt" -Force | Set-Acl -AclObject $NewAcl

Esses comandos aplicam os descritores de segurança no arquivo File0.txt a todos os arquivos de texto no C:\Temp diretório e a todos os seus subdiretórios.

O primeiro comando obtém o descritor de segurança do arquivo File0.txt no diretório atual e usa o operador de atribuição (=) para armazená-lo na $NewACL variável.

O primeiro comando no pipeline usa o cmdlet Get-ChildItem para obter todos os arquivos de texto no C:\Temp diretório. O parâmetro Recurse estende o comando para todos os subdiretórios de C:\temp. O parâmetro Include limita os arquivos recuperados para aqueles com a extensão de nome de .txt arquivo. O parâmetro Force obtém arquivos ocultos, que do contrário, seriam excluídos. (Você não pode usar c:\temp\*.txt, porque o parâmetro Recurse funciona em diretórios, não em arquivos.)

O operador de pipeline (|) envia os objetos que representam os arquivos recuperados para o Set-Acl cmdlet, que aplica o descritor de segurança no parâmetro AclObject a todos os arquivos no pipeline.

Na prática, é melhor usar o parâmetro WhatIf com todos os Set-Acl comandos que podem afetar mais de um item. Nesse caso, o segundo comando no pipeline seria Set-Acl -AclObject $NewAcl -WhatIf. Esse comando lista os arquivos que seriam afetados pelo comando. Depois de examinar o resultado, você pode executar o comando novamente sem o parâmetro WhatIf .

Exemplo 4: Desabilitar herança e preservar regras de acesso herdadas

$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

Esses comandos desabilitarão a herança de acesso de pastas pai, preservando ainda as regras de acesso herdadas existentes.

O primeiro comando usa o Get-Acl cmdlet para obter o descritor de segurança do arquivo Dog.txt.

Em seguida, variáveis são criadas para converter as regras de acesso herdadas em regras de acesso explícitas. Para proteger as regras de acesso associadas a isso contra herança, defina a $isProtected variável como $true.to allow inheritance, set $isProtected to $false. Para obter mais informações, consulte definir a proteção de regra de acesso. A $preserveInheritance variável definida para $true preservar regras de acesso herdadas; false para remover regras de acesso herdadas. Em seguida, a proteção de regra de acesso é atualizada usando o método SetAccessRuleProtection( ).

O último comando usa Set-Acl para aplicar o descritor de segurança ao Dog.txt. Quando o comando for concluído, as ACLs do Dog.txt que foram herdadas da pasta Pets serão aplicadas diretamente ao Dog.txt, e novas políticas de acesso adicionadas ao Pets não alterarão o acesso ao Dog.txt.

Exemplo 5: Conceder aos administradores controle total do arquivo

$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

Esse comando concederá ao grupo BUILTIN\Administrators controle total do arquivo Dog.txt.

O primeiro comando usa o Get-Acl cmdlet para obter o descritor de segurança do arquivo Dog.txt.

As próximas variáveis são criadas para conceder ao grupo BUILTIN\Administrators controle total do arquivo Dog.txt. A $identity variável definida como o nome de uma conta de usuário. A $fileSystemRights variável definida como FullControl e pode ser qualquer um dos valores FileSystemRights que especifica o tipo de operação associado à regra de acesso. A $type variável definida como "Permitir" especifica se deseja permitir ou negar a operação. A $fileSystemAccessRuleArgumentList variável é uma lista de argumentos que deve ser passada ao fazer o novo objeto FileSystemAccessRule . Em seguida, um novo objeto FileSystemAccessRule é criado e o objeto FileSystemAccessRule é passado para o método SetAccessRule(), adiciona a nova regra de acesso.

O último comando usa Set-Acl para aplicar o descritor de segurança ao Dog.txt. Quando o comando for concluído, o grupo BUILTIN\Administrators terá controle total do Dog.txt.

Parâmetros

-AclObject

Especifica uma ACL com os valores de propriedade desejados. Set-Acl altera a ACL do item especificado pelo parâmetro Path ou InputObject para corresponder aos valores no objeto de segurança especificado.

Você pode salvar a saída de um Get-Acl comando em uma variável e, em seguida, usar o parâmetro AclObject para passar a variável ou digitar um Get-Acl comando.

Type:Object
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ClearCentralAccessPolicy

Remove a política de acesso central do item especificado.

A partir de Windows Server 2012, os administradores podem usar o Active Directory e Política de Grupo para definir políticas de acesso central para usuários e grupos. Para obter mais informações, consulte Controle de Acesso Dinâmico: Visão geral do cenário.

Este parâmetro foi introduzido no Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

Solicita sua confirmação antes de executar o cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Exclude

Omite os itens especificados. O valor deste parâmetro qualifica o parâmetro Path. Insira um elemento ou padrão de caminho, como *.txt. Caracteres curinga são permitidos.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Filter

Especifica um filtro no formato ou linguagem do provedor. O valor deste parâmetro qualifica o parâmetro Path. A sintaxe do filtro, incluindo o uso de caracteres curingas, depende do provedor. Os filtros são mais eficientes do que outros parâmetros, pois o provedor os aplica ao recuperar os objetos, em vez de ter o PowerShell filtrar os objetos depois que eles são recuperados.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Include

Altera somente os itens especificados. O valor deste parâmetro qualifica o parâmetro Path. Insira um elemento ou padrão de caminho, como *.txt. Caracteres curinga são permitidos.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-InputObject

Altera o descritor de segurança do objeto especificado. Insira uma variável que contenha o objeto ou um comando que obtenha o objeto.

Você não pode canalizar o objeto a ser alterado para Set-Acl. Em vez disso, use o parâmetro InputObject explicitamente no comando.

Este parâmetro foi introduzido no Windows PowerShell 3.0.

Type:PSObject
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

Altera o descritor de segurança do item especificado. Ao contrário de Path, o valor do parâmetro LiteralPath é usado exatamente como foi digitado. Nenhum caractere é interpretado como caractere curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples ('). Aspas simples dizem ao PowerShell para não interpretar nenhum caractere como sequências de escape.

Este parâmetro foi introduzido no Windows PowerShell 3.0.

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Passthru

Retorna um objeto que representa o descritor de segurança que foi alterado. Por padrão, este cmdlet não gera saída.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

Altera o descritor de segurança do item especificado. Digite o caminho para um item, como um caminho para um arquivo ou chave de registro. Caracteres curinga são permitidos.

Se você passar um objeto de segurança para Set-Acl (usando os parâmetros AclObject ou SecurityDescriptor ou passando um objeto de segurança de Get-Acl para Set-Acl), e omitir o parâmetro Path (nome e valor), Set-Acl usará o caminho incluído no objeto de segurança.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-WhatIf

Mostra o que aconteceria se o cmdlet fosse executado. O cmdlet não é executado.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entradas

System.Security.AccessControl.ObjectSecurity, System.Security.AccessControl.CommonSecurityDescriptor

Você pode canalizar um objeto ACL ou um descritor de segurança para Set-Acl.

Saídas

FileSecurity

Por padrão, Set-Acl não gera nenhuma saída. No entanto, se usar o parâmetro Passthru, ele gera um objeto de segurança. O tipo do objeto de segurança depende do tipo do item.

Observações

Esse cmdlet só está disponível em plataformas do Windows.

O Set-Acl cmdlet é compatível com o sistema de arquivos do PowerShell e provedores de registro. Dessa forma, você pode usá-lo para alterar os descritores de segurança dos arquivos, diretórios e chaves do registro.