Primeiro de tudo, use o Set-Acl como este, já que o caminho do diretório é o primeiro argumento posicional:
Set-Acl $directory $acl
Em segundo lugar, você deve criar o objeto de usuário com apenas um argumento:
$user = New-Object System.Security.Principal.NTAccount("$domain\$username")
UPDATE: Parece que não aceita o "IIS APPPOOL \ AppPoolName" como um identificador NTAccount. Agora, existem duas maneiras de realizar o que você está tentando fazer:
-
Crie um novo objeto SID com o SID AppPoolIdentities e traduza-o em uma NTAccount, assim: link , e você deve ser capaz de tratá-lo como qualquer outro objeto NTAccount. Se você ainda deseja passar nomes de domínio / usuários para contas reais, embutido em alguma lógica simples que usa como padrão o AppPool SID se o nome de usuário for "AweSomeAppPool" e o domínio estiver vazio, apenas como um exemplo.
-
Use o PowerShell para invocar o icacls.exe e usá-lo para conceder / revogar quaisquer permissões desejadas, como esta (primeiro prompt de comando normal do formulário icacls e, em seguida, powershell, observe a diferença):
icacls.exe test.txt /grant "IIS AppPool\DefaultAppPool":(OI)(CI)M
cmd /c icacls test.txt /grant "IIS AppPool\DefaultAppPool:(OI)(CI)M"
Se você escolher a segunda opção, não deixe de testá-los manualmente primeiro, eu mesmo não tive a chance de testar esses exemplos específicos, mas deve funcionar