这是一个脚本来打开一个审计规则:
$path = 'C:\...\*' $ACL = new-object System.Security.AccessControl.FileSecurity $AccessRule = new-object System.Security.AccessControl.FileSystemAuditRule("everyone","ExecuteFile","success") $ACL.SetAuditRule($AccessRule) $dircont = gci $path -include "*.dot" foreach ($file in $dircont) { $ACL | Set-Acl $file }
但我希望能够做的是,对于任何给定的文件,删除任何和所有的审计规则。 所以假设你不知道用户有什么审计设置或者什么动作,你只是想摆脱这一切……就像我想我可以做这样的事情:
$AccessRule = new-object System.Security.AccessControl.FileSystemAuditRule("everyone","ExecuteFile","none")
但是,只有当你知道哪些用户已经被configuration为在该文件上进行审计时才有用…希望这是有道理的。 谢谢你的帮助。
删除规则有点棘手,您必须查看每个文件…
foreach($file in $somewhere) { $acl = Get-Acl $file $acl.GetAuditRules($True, $False, [System.Security.Principal.SecurityIdentifier]) |Foreach-Object { $acl.RemoveAuditRule($_); } Set-Acl $file $acl }
GetAuditRules的文档(及其神秘的参数)
这不解决你的问题,我不知道如何,但你的脚本可以清理一下:
$path = 'C:\...\*' $ACL = new-object Security.AccessControl.FileSecurity $AccessRule = new-object Security.AccessControl.FileSystemAuditRule ` everyone, ExecuteFile, success $ACL.SetAuditRule($AccessRule) gci $path -filter *.dot | Set-Acl -acl $ACL