Atribuir permissões NTFS com DirectoryEntry é demorado e sujeito à falhas. Uma alternativa fazê-lo com Cmdlets do PowerShell para manusear a Access Control List (ACL), mais especificamente Set-ACL e Get-ACL Primeiramente vamos aos comandos necessários em PowerShell.
# retornar lista de controle de acesso de um diretório $acl = Get-Acl c:\temp # variavel que armazena a permissão a ser concedida $permission = "meudominio\usuarioficticio","FullControl","Allow" # setando a nova regra para o diretório $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission $acl.SetAccessRule($accessRule) $acl | Set-Acl c:\temp
O segundo passo é executar o comando acima em C#. Segue o código:
//utilizar a sobrecarga que melhor atender sua necessidade
var conectionWsMan = new WSManConnectionInfo()
{
AuthenticationMechanism = AuthenticationMechanism.Kerberos,
ProxyAuthentication = AuthenticationMechanism.Negotiate,
};
var ps = PowerShell.Create();
var runspace = RunspaceFactory.CreateRunspace(conectionWsMan);
runspace.Open();
ps.Runspace = runspace;
ps.AddScript("$acl = Get-Acl c:\\temp");
ps.AddScript("$permission = \"meudominio\\usuarioficticio\",\"FullControl\",\"Allow\"");
ps.AddScript("$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission");
ps.AddScript("$acl.SetAccessRule($accessRule)");
ps.AddScript("$acl | Set-Acl c:\\temp");
ps.Invoke();
Abaixo estão as principais permissões que mais frequentemente são configuradas:
- FullControl
- Modify
- ReadAndExecute
- ListDirectory
- Read
- Write


