如何在PowerShell中的注册表项上使用getauditrules()获取ACL对象中的审核规则?

Fre*_* Ng 1 powershell audit acl

我正在尝试通过此代码应用审核规则

function add-acl($Right,$Access)
{
$audit = "mydomain\myaccount","$Right","containerinherit","none","$Access"
$r = new-object system.security.accesscontrol.registryauditrule $audit
$acl.addauditrule($r)
}

$acl = get-acl hklm:\software\_test
add-acl "CreateSubKey" "Success"
add-acl "Delete" "Success"  
add-acl "Delete" "Failure"  
$acl | set-acl
Run Code Online (Sandbox Code Playgroud)

但是此代码编写审核规则时没有考虑较早的规则。因此,我想在应用代码之前检索审核规则。为此,我使用了getauditrules()方法:

$acl.getauditrules($true,$true,??)
Run Code Online (Sandbox Code Playgroud)

在?? 位置,我尝试使用NTaccount对象和WindowsSecurity。它不返回错误,实际上根本不返回任何东西。这确实令人失望,因为使用Windows界面时,我可以看到已应用审核规则。我不明白什么类型的对象期望使用getauditrules()方法。有人能帮我吗 ?

CB.*_*CB. 5

尝试将-audit参数添加到get-aclcmdlet(此检索 SACLSystem Access Control List)。

$acl = get-acl hklm:\software\_test -audit
Run Code Online (Sandbox Code Playgroud)

您可以使用:

$acl.getauditrules($true,$true, [System.Security.Principal.NTAccount] )
Run Code Online (Sandbox Code Playgroud)

要么

$acl.getauditrules($true,$true, [System.Security.Principal.SecurityIdentifier] )
Run Code Online (Sandbox Code Playgroud)

根据您的目标。