2012-11-22 13 views
1

我想使用此代碼如何使用powershell中的註冊表項getauditrules()獲取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 

申請審覈規則但是這個代碼寫入審覈規則沒有考慮早期規則帳戶。 所以我想在應用代碼之前檢索審計規則。 爲此,我使用的方法getauditrules():

$acl.getauditrules($true,$true,??) 

在??位置,我嘗試了NTaccount對象和windowsSecurity。它不返回錯誤,實際上根本不返回任何內容。這真的讓人失望,因爲在使用Windows界面時,我可以看到應用了審計規則。 我不明白什麼類型的對象期待getauditrules()方法。 有人可以幫我嗎?

回答

3

嘗試將-audit參數添加到get-acl cmdlet(此檢索SACL,System Access Control List)。

$acl = get-acl hklm:\software\_test -audit 

的,你可以使用:根據你的目標

$acl.getauditrules($true,$true, [System.Security.Principal.NTAccount]) 

$acl.getauditrules($true,$true, [System.Security.Principal.SecurityIdentifier]) 

+0

謝謝你正是我想要的 –

+0

好東西。我也忘記用-audit進行驗證 –

+0

對不起,我有沒有辦法通過調用.NET方法而不是powershell cmdlet來產生結果?我之前在PowerShell cmdlet上進行了大量測試,特別是I/O測試(包括文件和註冊表)都要慢得多。我知道1ms vs 3ms似乎並不多,但是當你想要映射整個註冊表時,它肯定會變得明顯。 – Chavez

相關問題