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
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.