Remover um usuário da ACL completamente usando o PowerShell

3

Desejo remover um usuário das permissões de pasta usando o PowerShell. Eu encontrei muitos exemplos sobre como remover as permissões de usuário, mas eu realmente quero remover o usuário totalmente.

O equivalente seria o seguinte no Windows Explorer: 1. Clique com o botão direito do mouse na pasta e selecione Propriedades. 2. Clique na guia Segurança 3. Clique em Editar 4. Realce usuário ou grupo. 5. Clique em Remover

É o clique de remoção que estou tentando imitar no PowerShell.

Obrigado antecipadamente.

    
por Simon Darlow 21.02.2017 / 23:26

3 respostas

4

Como Simon sugeriu, os comandos a seguir alcançarão o que você está procurando para remover apenas um usuário ou grupo específico.

Usando o módulo NTFSSecurity ( link )

Remove-NTFSAccess -AccessRights FullControl -Account DOMAIN\Group -Path c:\temp -AccessType Deny -AppliesTo ThisFolderSubfoldersAndFiles
Remove-NTFSAccess -AccessRights FullControl -Account DOMAIN\Group -Path c:\temp -AccessType Allow -AppliesTo ThisFolderSubfoldersAndFiles

Eu escrevi um pequeno script para remover todos os grupos de segurança de uma pasta, exceto os grupos excluídos explicitamente.

$path = "C:\Path\To\Folder"
$users = @{}

$users = Get-NTFSAccess $path | Where-Object {$_.Account -ne "DOMAIN\Exclude"} | Select-Object Account

foreach ($user in $users) {
    $removalAccount = $user.Account
    Write-Host "Removing account - $($removalAccount)"
    Remove-NTFSAccess -Path $path -Account $removalAccount -AccessRights FullControl -AccessType Allow
    Remove-NTFSAccess -Path $path -Account $removalAccount -AccessRights FullControl -AccessType Deny    
}
    
por 28.03.2017 / 14:45
1

De um modo geral, uma combinação de Get-Acl e Set-Acl devem poder Realize o que você precisa. No entanto, Get-Acl tem uma limitação irritante que pode se manifestar como sendo incapaz de gravar a ACL modificada novamente usando Set-Acl devido a permissões insuficientes (a menos que você tenha direitos para também alterar a propriedade). Mais informações sobre esse problema podem ser encontradas em esta pergunta SO .

Em qualquer caso, para permissões do sistema de arquivos, você pode contornar a limitação do Get-Acl usando um método do objeto retornado por Get-Item .

$acl = (Get-Item C:\myfolder).GetAccessControl('Access')

Se você examinar a propriedade $acl.Access do objeto retornado, descobrirá que é uma coleção de FileSystemAccessRule objetos (também conhecidos como objetos ACE). Por fim, você deseja localizar o subconjunto dessas ACEs que correspondem ao usuário que está tentando remover e também ignorar as herdadas. Você não pode realmente remover ACEs herdadas e até mesmo o Windows Explorer dirá o mesmo se você tentar removê-las usando a GUI. De qualquer forma, eis como você pode obter esse subconjunto de ACEs.

$acesToRemove = $acl.Access | ?{ $_.IsInherited -eq $false -and $_.IdentityReference -eq 'MYCOMPUTER\myuser' }

Agora que você tem as ACEs para remover, basta removê-las da ACL original e gravá-las na pasta.

$acl.RemoveAccessRuleAll($acesToRemove)
Set-Acl -AclObject $acl C:\myfolder\
    
por 22.02.2017 / 01:21
-1

Eu consegui fazer isso funcionar usando o módulo NTFSecurity recomendado pelo zoredache.

Remove-NTFSAccess -AccessRights FullControl -Account DOMAIN\Group -Path c:\temp -AccessType Deny -AppliesTo ThisFolderSubfoldersAndFiles
Remove-NTFSAccess -AccessRights FullControl -Account DOMAIN\Group -Path c:\temp -AccessType Allow -AppliesTo ThisFolderSubfoldersAndFiles

Os dois comandos acima eliminaram toda a segurança e o usuário / grupo desapareceu da lista de permissões. Provavelmente farei mais investigações para ver se isso pode ser simplificado, mas faz exatamente o que eu preciso.

Obrigado pela sua ajuda.

    
por 22.02.2017 / 01:30